При использовании 2 JSON (или более) одновременно мой анализ не работает - PullRequest
0 голосов
/ 21 июня 2011

Я получаю JSON с сервера.

Я могу анализировать только один JSON за раз. Но когда я получаю 2 JSON (или больше) одновременно, мой анализ не работает. Это не могло сделать десериализацию правильно. Как мне решить эту проблему?

Обновление:

Я отправляю, например, 5 запросов с интервалом времени = 0,1; Иногда я получаю

{"status": "success", "msg": "Dish1 flagged"}

- все в порядке. Но иногда я получаю

{"status": "success", "msg": "Dish1 flagged"}{"status": "success", "msg": "Dish2 flagged"}

- это плохо, мой парсер не работает. Если я получил

{"status": "success", "msg": "Dish1 flagged"}{"status": "success", "msg": "Dish2 flagged"}

Я хочу, чтобы первый json переместился в корзину, а второй JSON начал разбирать.

Структура JSON может быть намного сложнее, чем эти. Я могу управлять сервером, и он отправляет действительный JSON.

у меня класс сети

-(id) init
{
    if(self=[super init])
    {
        receivedData = [[NSMutableData alloc] init];
    }
    return self;
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    [conn release];
    conn = nil;

    NSError *error;
    NSDictionary *dictionary = [[CJSONDeserializer deserializer] deserializeAsDictionary:receivedData error:&error];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [receivedData appendData:data];
}

- (void) createConnectionWithRequest:(NSMutableURLRequest *)request delegate:(id)delegate
{
    [receivedData setLength:0];
    conn = [[NSURLConnection alloc] initWithRequest:request delegate:delegate startImmediately:YES];
}

Ответы [ 3 ]

1 голос
/ 21 июня 2011

Как доставляется JSON? у вас есть контроль над форматированием?

Если ваши несколько объектов структурированы как массив [{"like":"this"},{"or":"similar"}], вам, вероятно, придется изменить значение на

NSArray *array = [[NSArray alloc] init];

array = [[CJSONDeserializer deserializer] deserializeAsArray:receivedData error:&error];

но я не использовал этот конкретный парсер, поэтому синтаксис может быть неправильным

0 голосов
/ 21 июня 2011

Если вы не можете изменить выходной формат вашего сервера, вы можете сначала разбить данные на массив JSON, а затем просто использовать последние из массива. Это действительно легко просто разделить с помощью фигурных скобок.

0 голосов
/ 21 июня 2011
{"status": "success", "msg": "Dish1 flagged"}{"status": "success", "msg": "Dish2 flagged"}

Недопустимо JSON.

[{"status": "success", "msg": "Dish1 flagged"}, {"status": "success", "msg": "Dish2 flagged"}]

Будет действительным.

Поскольку вы можете контролировать сервер, убедитесь, что он отвечает только действительными данными JSON для этих запросов.Если проблема в том, что вы объединяете ответы на несколько запросов вместе, пожалуйста, покажите код обработки вашего запроса, чтобы мы могли помочь вам прекратить это делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...