如何解析嵌套的JSON对象?

时间:2014-02-26 03:34:39

标签: ios objective-c arrays json

我得到这样的JSON格式:

stream( { posts: [{CHANNEL: {ios: "(format=m3u8-aapl).m3u8"} }]})

我想得到的是" ios"的数组。 这是我的代码:

id jsonObjects = [NSJSONSerialization JSONObjectWithData:
                  jsonSource options:NSJSONReadingMutableContainers error:nil];
for (NSDictionary *dataDict in jsonObjects) {
    NSArray *ios_data = [[[dataDict objectForKey:@"posts"] objectForKey:@"CHANNEL"] objectForKey:@"ios"];
    NSLog(@"%@",ios_data);
    dict = [NSDictionary dictionaryWithObjectsAndKeys:ios_data, ios,nil];

}

但它返回NULL,有什么问题呢?

3 个答案:

答案 0 :(得分:3)

你的“JSON”:

stream( { posts: [{CHANNEL: {ios: "(format=m3u8-aapl).m3u8"} }]})

不是JSON。您可以尝试通过http://jsonlint.com/之类的验证程序运行它来测试它。

此外,您应该创建一个NSError引用来传入而不是nil,这样NSJSONSerialization可以为您提供一个错误对象。这将有助于您的调试。


以下是 有效JSON时数据的示例:

{
    "stream": [
        {
            "posts": [
                {
                    "CHANNEL": {
                        "ios": "(format=m3u8-aapl).m3u8"
                    }
                }
            ]
        }
    ]
}

(我将其分开以便更清晰,但解析时不需要间距。)

答案 1 :(得分:0)

一旦你的阵列持有“帖子”,你就可以这样深入了解:

NSArray *fileData = [myDic1 valueForKeyPath:@"posts.CHANNEL"];

然后像这样访问:

for (int i=0; i < [clientFileData count]; i++) {
NSDictionary *myDictionary = [fileData objectAtIndex:i];
]

另外,除非我错了,否则您的JSON文件似乎格式不正确。

答案 2 :(得分:0)

得到您的回复:

NSDictionary *dictionaryData = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];

正确的JSOn应该是这样的

{
   "posts":[
      {
         "CHANNEL":{
            "ios":"(format=m3u8-aapl).m3u8"
         }
      }
   ]
}

获取正确的JSON格式,然后尝试解析它。你做错了一件事是 POST 是一个数组。