JSONKit Разбор вложенных JSON с Objective-C - PullRequest
0 голосов
/ 01 января 2012

Я пытаюсь проанализировать мой вложенный JSON с JSONKit, и JSON 2-го уровня не анализируется правильно.

Вот пример 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);

Куда я иду?

Ответы [ 2 ]

0 голосов
/ 01 января 2012

Если вы замените строку содержимого следующим:

"[{\"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 голосов
/ 01 января 2012

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

...