【问题标题】:How do I parse an NSString of an array of JSON Objects?如何解析 JSON 对象数组的 NSString?
【发布时间】:2015-02-09 06:12:09
【问题描述】:

我无法将 JSON 对象的 NSString 解析为不同的字段。 JSON 对象是从表中提取的。检索 JSON 对象的代码如下所示:

NSString* retrievedStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

             NSCharacterSet *delimiters = [NSCharacterSet characterSetWithCharactersInString:@"{}"];
             NSArray *splitString = [retrievedStr componentsSeparatedByCharactersInSet:delimiters];

splitString 的输出:

"Array[",

  "\"image_link\":\"schedule_miss_vn\",\"start_time\":\"17:00\",\"end_time\":\"17:30\",\"viet_performer\":\"\\u0000N\\u0000h\\u0000?\\u0000m\\u0000 \\u0000L\\u0000e\\u0000g\\u0000e\\u0000n\\u0000d\\u0000a\\u0000r\\u0000y\",\"english_performer\":\"Legendary Group\",\"viet_event\":null,\"english_event\":\"Lion Dance\",\"day\":0,\"stage\":0",

    ",",

  "\"image_link\":\"schedule_miss_vn\",\"start_time\":\"17:30\",\"end_time\":\"18:00\",\"viet_performer\":\"\\u0000I\\u0000v\\u0000a\\u0000n\\u0000 \\u0000C\\u0000h\\u0000e\\u0000o\\u0000n\\u0000g\",\"english_performer\":\"Ivan Cheong\",\"viet_event\":\"Ca Nh?c\",\"english_event\":\"Singing\",\"day\":0,\"stage\":0",

    ",",

.....

它基本上是一个 JSON 对象数组。

我想检索和存储 NSStrings 中每个 JSON 对象的每个字段的值(即 start_time、end_time 等的值),以便我可以在 UITableView 中填充它,但我不知道如何解析检索到的 NSString 以实现我想要的。

谁能提供一些帮助?

谢谢

更新: 检索到的Str 输出如下所示:

Array[{"image_link":"schedule_miss_vn","start_time":"17:00","end_time":"17:30","viet_performer":"\u0000N\u0000h\u0000?\u0000m\u0000 \u0000L\u0000e\u0000g\u0000e\u0000n\u0000d\u0000a\u0000r\u0000y","english_performer":"Legendary Group","viet_event":null,"english_event":"Lion Dance","day":0,"stage":0},{"image_link":"schedule_miss_vn","start_time":"17:30","end_time":"18:00","viet_performer":"\u0000I\u0000v\u0000a\u0000n\u0000 \u0000C\u0000h\u0000e\u0000o\u0000n\u0000g","english_performer":"Ivan Cheong","viet_event":"Ca Nh?c","english_event":"Singing","day":0,"stage":0},
....
]

【问题讨论】:

  • 为什么要删除 {}?
  • 我不确定。我只想为每个json对象解析从{到}开始的NSString到一个NSDictionary,但我不知道该怎么做。
  • 你能用纯 JSON 字符串更新我吗?
  • 我已经编辑了我的答案。
  • @Pangu: 用户 'NSJsonSerialization' 用于解析子。

标签: ios objective-c json nsstring


【解决方案1】:

在头部插入{,在尾部插入}。并尝试

NSError *error = nil;
id appData = [NSJSONSerialization JSONObjectWithData:respose options:NSJSONReadingAllowFragments error:&error];

编辑: 你的 JSON 不合适。 应该是这样的:

    { "Array" : [{"image_link":"schedule_miss_vn","start_time":"17:00","end_time":"17:30","viet_performer":"\u0000N\u0000h\u0000?\u0000m\u0000 \u0000L\u0000e\u0000g\u0000e\u0000n\u0000d\u0000a\u0000r\u0000y","english_performer":"Legendary Group","viet_event":null,"english_event":"Lion Dance","day":0,"stage":0},
{"image_link":"schedule_miss_vn","start_time":"17:30","end_time":"18:00","viet_performer":"\u0000I\u0000v\u0000a\u0000n\u0000 \u0000C\u0000h\u0000e\u0000o\u0000n\u0000g","english_performer":"Ivan Cheong","viet_event":"Ca Nh?c","english_event":"Singing","day":0,"stage":0}

    ]}

【讨论】:

  • 我不知道为什么不是这样。有关系吗?其他人编写了数据库,我只是从数据库中检索响应。
  • 是的,这很重要。如果响应格式无效,您将无法解析它。
【解决方案2】:

【讨论】:

  • 我已经尝试过代码 NSDictionary *jsonReturn = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error] 但 jsonReturn 返回 null
  • @Pangu:尝试从字符串中删除“Array”,您可以将它与 NSJSonSerialization 一起使用。否则,您的数据不是真正的 JSON,因此在尝试解析后您将得到 null。
【解决方案3】:

有定义明确的开源库可以为您完成这项工作。

我推荐的一个是:JSONModel https://github.com/icanzilb/JSONModel

【讨论】:

    【解决方案4】:

    你有没有尝试过 JSON 加速器

    https://itunes.apple.com/in/app/json-accelerator/id511324989?mt=12

    它将您的 JSON 转换为对象

    【讨论】:

      【解决方案5】:

      我不明白为什么您的数据会以这种方式保存,但是:
      要获得有效的 JSON,您需要从字符串中删除“数组”。 然后,您可以使用NSJSONSerialization

      所以:

      retrievedStr = [retrievedStr substringWithRange:NSMakeRange(0, [@"Array" length])];
      NSError *error;
      NSArray *yourJSONArray = [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding] options:0 error:&error];
      

      【讨论】:

        【解决方案6】:

        有效的 JSON 结构不会包含单词“Array”。不知道你是如何获得数据的。如果返回的数据已经是一个 Objective-C 数组(就像你展示的那样),那么你的数据结构就是一个 JSON 对象数组。您需要遍历数组,然后解码 JSON 对象。

        【讨论】:

          【解决方案7】:

          使用NSJSONSerialization解析json结果。

          NSError *error;
              id result = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
          

          【讨论】:

            猜你喜欢
            • 2019-12-01
            • 2019-01-14
            • 1970-01-01
            • 1970-01-01
            • 2021-07-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-06-02
            相关资源
            最近更新 更多