SBJSON теряет котировки - PullRequest
0 голосов
/ 03 мая 2011

Я использую синтаксический анализатор SBJSON для анализа ответа JSON:

{"status":0,"sessions":[{"name":"kldlksdklsdkl","active":false,"status":"saved","type":"web","key":"30228ee71f09b93aaa2d1738","contributor_id":"lance","created_at":"Mon May 02, 2011 02:35 PM","closed_at":"Mon May 02, 2011 02:46 PM"}{"name":"Blahieririe","active":false,"status":"saved","type":"web","key":"dbd2bbcc8681bba6a6532051","contributor_id":"lance","created_at":"Mon May 02, 2011 01:42 PM","closed_at":"Mon May 02, 2011 02:34 PM"},{"name":"Jim","active":false,"status":"saved","type":"web","key":"ec5bcf18356a29bb4490841f","contributor_id":"lance","created_at":"Fri April 29, 2011 02:37 PM","closed_at":"Fri April 29, 2011 02:38 PM"}]}

с сервера, используя этот код:

NSArray *sessionsArray = [dictionary objectForKey:@"sessions"];
    NSArray *tempArray = [[NSArray alloc] init];
    for(NSString *item in sessionsArray){
        NSLog(@"Session Found: \'%@\'",item);

        NSDictionary *myDictionary = [item JSONValue];
    }

Я получаю хороший массив из моегоJSON, но когда я пытаюсь поместить каждую часть в NSDictionary, это дает мне исключение, и я NSLoged его и обнаружил, что кавычки удаляются из некоторых ключей и или значений, как показано здесь:

{
active = 1;
"contributor_id" = lance;
"created_at" = "Mon May 02, 2011 03:26 PM";
key = e10e5feeea3425ae213cb4cc;
name = "JSON TEST";
status = active;
type = web;
}

это ошибка в парсере JSON?или я делаю что-то глупое?

1 Ответ

4 голосов
/ 03 мая 2011

Кавычки не «удаляются».

В JSON каждая строка заключена в кавычки, но сами кавычки не являются частью строк.Например, если вы напишите

NSArray *sessionsArray = [dictionary objectForKey:@"sessions"];
NSDictionary *session = [sessionArray objectAtIndex:0];
NSString sessionName = [session objectForKey:@"name"];

, соответствующее имя сеанса не будет отображаться в кавычках.

Когда вы NSLog() словарь или массив, Cocoa использует свойство NeXTSTEPФормат списка для представления словаря / массива.В этом формате кавычки являются необязательными, если значения являются простыми словами.

Тем не менее, вы должны перечислить эти данные JSON следующим образом:

NSString *jsonString = …;
NSDictionary *jsonResult = [jsonString JSONValue];
NSArray *sessionsArray = [jsonResult objectForKey:@"sessions"];
for (NSDictionary *session in sessionArray) {
    NSString *sessionName = [session objectForKey:@"name"];
    BOOL sessionActive = [[session objectForKey:@"active"] boolValue];
    NSString *sessionStatus = [session objectForKey:@"status"];
    …
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...