NSJSONSerialization анализ данных ответа - PullRequest
1 голос
/ 28 декабря 2011

Я создал службу WCF, которая предоставляет следующий ответ на мою операцию POST:

"[{\"Id\":1,\"Name\":\"Michael\"},{\"Id\":2,\"Name\":\"John\"}]"

Мой вызов JSONObjectWithData не возвращает никакой ошибки, но я не могу перечислить результаты,что я делаю не так?

NSError *jsonParsingError = nil;
NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&jsonParsingError];

NSLog(@"jsonList: %@", jsonArray);

if(!jsonArray)
{
    NSLog(@"Error parsing JSON:%@", jsonParsingError);
}
else
{
    // Exception thrown here.        
    for(NSDictionary *item in jsonArray)
    {
        NSLog(@"%@", item);
    }
}

Ответы [ 3 ]

3 голосов
/ 28 декабря 2011

Как отметил Джереми, вы не должны избегать кавычек в данных JSON.Но вы также указали возвращаемую строку.Это делает его строкой JSON, а не объектом, поэтому, когда вы ее декодируете, у вас есть строка, а не изменяемый массив, поэтому вы получаете сообщение об ошибке при попытке быстрой итерации ... вы не можетебыстрая итерация по строке.

Ваш фактический JSON должен выглядеть следующим образом: [{"Id":1,"Name":"Michael"},{"Id":2,"Name":"John"}].Никаких кавычек, никаких побегов.Как только вы удалите кавычки вокруг вашего объекта JSON, ваше приложение больше не будет аварийно завершать работу, но затем вы получите ошибку десериализации JSON для искаженных данных (экранированные символы).

3 голосов
/ 28 декабря 2011

Вероятная причина в том, что вы используете неправильный фундаментальный объект. Попробуйте изменить NSMutableArray на NSDictonary.

Из:

NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&jsonParsingError];

Кому:

NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&jsonParsingError];
0 голосов
/ 02 октября 2013

Синтаксический анализ с NSJSONSerialization очень прост, но я также создал небольшую инфраструктуру, которая позволяет анализировать значения JSON непосредственно в объектах класса, а не работать со словарями.Посмотрите, это может быть полезно: https://github.com/mobiletoly/icjson

...