【问题标题】:Parse complex JSON Data [closed]解析复杂的 JSON 数据 [关闭]
【发布时间】:2013-01-25 01:36:10
【问题描述】:

我想解析来自服务器的复杂 json 数据,格式如下:

    {

    "Data 1":{
        "2012-12-01":[
            {
                "field 1":"field 2",
                "summary":"summary 1"
            },
            {
                "field":"field 2",
                "summary":"summary 2"
            },
            {
                "service":"service 3",
                "summary":"summary 3"
            }
        ],
        "2012-12-10":[
            {
                "field":"field 1",
                "summary":"summary 1"
            },
            {
                "field":"field 2",
                "summary":"summary 2"
            }
        ],
        "2012-12-31":[
            {
                "field":"field 1",
                "summary":"summary 1"
            }
        ]
    },
    "Data 2":{
        "2013-01-4":[
            {
                "field":"field 1",
                "summary":"summary 1"
            },
            {
                "field":"field 2",
                "summary":"summary 2"
            },
            {
                "field":"field 3",
                "summary":"summary 3"
            }
        ],
        "2013-01-8":[
            {
                "field":"field 1",
                "summary":"summary 1"
            },
            {
                "field":"field 2",
                "summary":"summary 2"
            }
        ],
        "2013-01-25":[
            {
                "field":"field 1",
                "summary":"summary 1"
            }
        ]
    },
    "Data 3":{
        "2013-02-09":[
            {
                "field":"field 1",
                "summary":"summary 1"
            },
            {
                "field":"field 2",
                "summary":"summary 2"
            },
            {
                "field":"field 3",
                "summary":"summary 3"
            }
        ]
    }

} 

如何使用 SBJSON 解析它?

请帮忙

提前致谢

【问题讨论】:

  • 您的任何股票解析器都会返回解析为数组/字典“巢”的 JSON。对于 Objective-C,有六种不同“品牌”的解析器,大多数是免费的。您输入 JSON 字符串,它会返回“巢”。
  • 使用在线 JSON 解析器(例如 json.parser.online.fr)来“可视化”JSON。
  • 我在使用 SBJSon 解析器解析时需要帮助,请帮助
  • 阅读online documentation。有一种方法可以将字符串转换为对象,另一种方法可以将对象转换为字符串。你想要第一个。
  • (再一次,投票关闭的人懒得找到骗子,所以他们使用了虚假的关闭理由。)

标签: iphone ios objective-c sbjson


【解决方案1】:

解析 JSON 是一个单行命令。如果你想使用 iOS 5 及更高版本中内置的 JSON 解析器,NSJSONSerialization 只是:

NSError *error;
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data
                                                           options:0
                                                             error:&error];

如果你想使用SBJSON,那就是:

SBJsonParser *parser = [[SBJsonParser alloc] init];
NSDictionary *dictionary = [parser objectWithData:data];

无论如何,既然您已经在 NSDictionary 中获得了 JSON,您可以继续进行适当的导航,例如:

NSDictionary *data1 = [dictionary objectForKey:@"Data 1"];
NSArray *arrayDecFirst2012 = [data1 objectForKey:@"2012-12-01"];
NSDictionary *firstDictionaryInDecFirst2012 = [arrayDecFirst2012 objectAtIndex:0];
NSString *fieldOne = [firstDictionaryInDecFirst2012 objectForKey:@"field 1"];

或者,如果你想使用新的下标符号,那就是:

NSDictionary *data1 = dictionary[@"Data 1"];
NSArray *arrayDecFirst2012 = data1[@"2012-12-01"];
NSDictionary *firstDictionaryInDecFirst2012 = arrayDecFirst2012[0];
NSString *fieldOne = firstDictionaryInDecFirst2012[@"field 1"];

【讨论】:

    【解决方案2】:

    当“漂亮打印”时,您的 JSON 的第一部分看起来像这样 --

    {
        "Data 1":{
            "2012-12-01":[
                {
                    "field 1":"field 2",
                    "summary":"summary 1"
                },
                {
                    "field":"field 2",
                    "summary":"summary 2"
                },
                {
                    "service":"service 3",
                    "summary":"summary 3"
                }
            ],
            "2012-12-10":[
                {
                    "field":"field 1",
                    "summary":"summary 1"
                },
                {
                    "field":"field 2",
                    "summary":"summary 2"
                }
            ],
            "2012-12-31":[
                {
                    "field":"field 1",
                    "summary":"summary 1"
                }
            ]
        },
        "Data 2":{
            "2013-01-4":[
    

    JSON 的最外层是一个字典(JSON 称它为“对象”)——你可以从 { 的开头看出。在该字典中有一个名为“Data 1”的键/对象对。该对象是一个字典(另一个{),其第一个键/对象对称为“2012-12-01”。第二对的对象是一个包含三个字典的数组([)。等等。

    【讨论】:

    • 这种情况下的解决方案是什么?我也被困在将 json 转换为 c# 类对象 -{ 'aa-AA': { lanCODE: 'aa-AA', genNames: { female: ['Wavenet'], male: ['Bavenet', 'Bavenet'] , }, 默认: 'Wavenet', systemLocale: ['ara', 'aru', 'are', 'aro', 'arh', 'arm', 'arq', 'ark'], 名称: 'xxxx' , }, 'aa-AA': { lanCODE: 'aa-AA', genNames: { 女性: ['Wavenet'], 男性: ['Bavenet', 'Bavenet'], }, 默认值: 'Wavenet', systemLocale : ['ara', 'aru', 'are', 'aro', 'arh', 'arm', 'arq', 'ark'], name: 'xxxx', } }
    【解决方案3】:

    我从未专门使用过 SBJSON,但从外观上看,您应该可以这样做:

    (这是假设您的 JSON 当前是 NSString)

    NSDictionary *arrayOfJSONString = [SBJsonObject objectWithString:jsonString];
    

    或类似的东西。

    我个人有时会使用JSONKit。它很小,只需一个 .h/.m 即可包含在您的项目中。 (它也包含在 RestKit 中)。在这种情况下,您只需:

    NSDictionary *jsonDict = [jsonString objectFromJSONString];
    

    然后你可以像这样使用它:

    NSDictionary *dataOne = [jsonDict objectForKey:@"Data 1"];
    

    如果您想创建 Objc-C 类,我会看看 RestKit

    【讨论】:

      【解决方案4】:

      请逐步阅读本教程

      Working with JSON in iOS

      如果您遇到任何问题,请告诉我

      【讨论】:

        猜你喜欢
        • 2019-08-28
        • 1970-01-01
        • 2021-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多