JSONKit使用Objective-C解析嵌套JSON

时间:2012-01-01 15:22:59

标签: objective-c json parsing jsonkit

我试图用JSONKit解析我的嵌套JSON,并且没有正确解析第二级JSON。

以下是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 :(得分:0)

这很容易回答:您正在逃避\以及"。因此,NSString* content中的结果将为\"。这是您的JSON解析器无法消化的内容。因此,请使用\\\" \"来代替{{1}}。

答案 1 :(得分: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"}]