JSONKit使用Objective-C解析嵌套JSON

JSONKit使用Objective-C解析嵌套JSON,objective-c,json,parsing,jsonkit,Objective C,Json,Parsing,Jsonkit,我试图用JSONKit解析我的嵌套JSON,但是第二级JSON解析不正确 JSON.parse("[{\"Id\":\"1\",\"Name\":\"John\"},{\"Id\":\"2\",\"Name\":\"John\"}]") >>> [Object { Id="1", Name="John"}, Object { Id="2", Name="John"}] 下面是示例JSON { "app": { "content": "[{\\\"Id\

我试图用JSONKit解析我的嵌套JSON,但是第二级JSON解析不正确

JSON.parse("[{\"Id\":\"1\",\"Name\":\"John\"},{\"Id\":\"2\",\"Name\":\"John\"}]")
>>> [Object { Id="1", Name="John"}, Object { Id="2", Name="John"}]
下面是示例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);

我哪里出错了?

这很容易回答:您正在逃逸
\
以及
。因此您在
NSString*内容中的结果将是
\”
。这是JSON解析器无法消化的。因此,如果将内容字符串替换为以下内容,请使用此
\\\\”

,而不是

"[{\"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"}]

那么,有没有办法让JSONKit解析器尊重这些斜杠呢?我说的是错的。它实际上是以数组开头的有效JSON。这就是为什么JSONKit正确地解析了它(我刚刚成功地测试了它)。但是由于字符串包含三个斜杠\\\,我的选项是什么?那么JSON字符串从何而来?它是由他人提供的API生成的,还是由您自己生成的?如果它是由您自己生成的,最好的方法是正确地生成它。它是由我的API生成的。我使用PHP以正确的方式生成它。JavaScript可以很好地处理这个JSON。