如何访问 NSMutableArray 中的 JSON 数据?
Posted
技术标签:
【中文标题】如何访问 NSMutableArray 中的 JSON 数据?【英文标题】:How do I access JSON data in an NSMutableArray? 【发布时间】:2013-11-19 11:38:13 【问题描述】:我正在尝试访问从网站获取并存储在数组中的 JSON 数据。但是,首先,我想过滤除“标题”信息之外的所有内容,我正在使用valueForKey:
方法进行此操作。为了测试这一点,我使用NSLog
方法将它们写入日志,但是当我运行它时,我得到“null”。
谁能告诉我,为什么我会得到我正在得到的东西?
感谢您的帮助,非常感谢。
NSURL *redditURL = [NSURL URLWithString:@"http://pastebin.com/raw.php?i=FHJVZ4b7"];
NSError *error = nil;
NSString *jsonString = [NSString stringWithContentsOfURL:redditURL encoding:NSASCIIStringEncoding error:&error];
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSMutableArray *json = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
NSMutableArray *titles = [json valueForKey:@"title"];
NSLog(@"%@", json);
【问题讨论】:
将jsonString
和json
数组打印到控制台(通过NSLog)。这应该让您知道出了什么问题。大概是来自 URL 的响应不是数组而是字典。
为什么你把数据放到array
它应该放到dictionary
?
NSMutableArray *children = [[json valueForKey:@"data"] valueForKey:@"children"]; NSMutableArray *titles = [children valueForKeyPath:@"data.title"];
【参考方案1】:
查看该 pastebin 中返回的 JSON 对象,您会得到以下信息:
"kind":"Listing",
"data":
"modhash":"",
"children":[ ... ],
"after":"t3_1qwcm7",
"before":null
这不是一个数组,它是一个 JSON 对象。要获取孩子的标题,您需要执行以下操作:
NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
NSMutableArray *children = [[json objectForKey:@"data"] objectForKey:@"children"];
NSMutableArray *titles = [children valueForKeyPath:@"data.title"];
这是因为 children 数组嵌套在 "data"
对象中,而每个单独的子对象都嵌套在另一个 "data"
对象中。
然后您还需要调用valueForKeyPath:
而不是valueForKey:
,因为数据嵌套在另一个对象中
【讨论】:
以上是关于如何访问 NSMutableArray 中的 JSON 数据?的主要内容,如果未能解决你的问题,请参考以下文章
访问 NSMutableArray 中的 objectatIndex
如何遍历NSMutableArray 里面的NSArray的值