2012-01-01 2 views
0

Я пытаюсь разобрать мой вложенный JSON с JSONKit, а второй уровень JSON не обрабатывается правильно.JSONKit Parsing Вложенный JSON с Objective-C

Вот пример JSON ...

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

и вот мой код ...

NSString *jsonString = "...long nested json string..."; 

NSDictionary *jsonParsed = [jsonString objectFromJSONString]; 

NSString *content = [[jsonParsed objectForKey:@"app"] objectForKey:@"content"]; 

NSDictionary *jsonContent = [content objectFromJSONString]; 

NSLog(@"%@", jsonContent); 

Где я буду неправильно?

ответ

0

Это довольно легко ответить: вы избегаете \, а также ". Таким образом, ваш результат в NSString* content будет \". Это то, что ваш парсер JSON не будет переваривать. Поэтому используйте вместо \\\" этот \".

+0

так есть способ, которым я могу оценить парсер JSONKit, чтобы уважать эти косые черты? – Neutralizer

+0

То, что я сказал, было неправильным. Фактически это JSON, начинающийся с массива. Вот почему JSONKit анализирует это правильно (я только что успешно протестировал его). – Paul

0

Если заменить строку контента со следующими:

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

Это будет корректно распознаны.

JSON.parse("[{\"Id\":\"1\",\"Name\":\"John\"},{\"Id\":\"2\",\"Name\":\"John\"}]") 
>>> [Object { Id="1", Name="John"}, Object { Id="2", Name="John"}] 

Возможно, вы дважды избегали строки контента где-то в своем коде.


Я просто использовал firebug, чтобы узнать, правильно ли JSON. JSONKit - это то же самое:

clowwindy:~ clowwindy$ cat /tmp/input.txt 
{ 
    "app": { 
     "content": "[{\"Id\":\"1\",\"Name\":\"John\"},{\"Id\":\"2\",\"Name\":\"John\"}]" 
    } 
} 

NSError *error; 
NSString *input = [NSString stringWithContentsOfFile:@"/tmp/input.txt" encoding:NSUTF8StringEncoding error:&error]; 

NSString *jsonString = input; 

NSDictionary *jsonParsed = [jsonString objectFromJSONString]; 

NSString *content = [[jsonParsed objectForKey:@"app"] objectForKey:@"content"]; 

NSDictionary *jsonContent = [content objectFromJSONString]; 

NSLog(@"%@", jsonContent); 
NSLog(@"%@", content); 

2012-01-02 00:26:39.818 testjson[12700:707] (
     { 
     Id = 1; 
     Name = John; 
    }, 
     { 
     Id = 2; 
     Name = John; 
    } 
) 
2012-01-02 00:26:39.822 testjson[12700:707] [{"Id":"1","Name":"John"},{"Id":"2","Name":"John"}] 
+0

Вы используете JavaScript? – Neutralizer

+0

Вот что я знаю. Но поскольку строка содержит тройные косые черты \\\, каков мой вариант? – Neutralizer

+0

Итак, откуда взялась эта строка JSON? Является ли он генерируется некоторыми API, предоставленными другими, или вами? Если он генерируется самостоятельно, лучшим способом является его правильное создание. – clowwindy