【问题标题】:JSONKit Parsing Nested JSON with Objective-CJSONKit 使用 Objective-C 解析嵌套的 JSON
【发布时间】:2012-01-01 15:22:58
【问题描述】:

我正在尝试使用 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);

我哪里错了?

【问题讨论】:

    标签: objective-c json parsing jsonkit


    【解决方案1】:

    这很容易回答:你正在逃避\ 以及"。所以你在NSString* content 中的结果将是\"。这是您的 JSON 解析器无法消化的内容。所以用这个\"代替\\\"

    【讨论】:

    • 那么有没有办法告诉 JSONKit 解析器尊重这些斜杠?
    • 我说错了。它实际上是一个以数组开头的有效 JSON。这就是 JSONKit 正确解析它的原因(我刚刚测试成功)。
    【解决方案2】:

    如果您将内容字符串替换为以下内容:

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

    【讨论】:

    • 这就是我所知道的。但由于字符串包含三个斜杠 \\\,我的选择是什么?
    • 那么 JSON 字符串是从哪里来的呢?它是由其他人提供的某些 API 生成的,还是您自己生成的?如果是自己生成的,最好的办法就是正确生成。
    • 嗯,它是由我的 API 生成的。我正在以正确的方式使用 PHP 生成它。 JavaScript 可以很好地处理这个 JSON。
    猜你喜欢
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    相关资源
    最近更新 更多