将 JSON 数组转换为 NSDictionary 后,我该怎么办?
Posted
技术标签:
【中文标题】将 JSON 数组转换为 NSDictionary 后,我该怎么办?【英文标题】:After convert JSON array to NSDictionary, what should I do? 【发布时间】:2013-10-10 03:10:45 【问题描述】:我需要解析以下格式的 JSON 数组:
[
name: "10-701 machine learning",
_id: "52537480b97d2d9117000001",
__v: 0,
ctime: "2013-10-08T02:57:04.977Z"
,
name: "15-213 computer systems",
_id: "525616b7807f01fa17000001",
__v: 0,
ctime: "2013-10-10T02:53:43.776Z"
]
所以在获得 NSData 后,我将其传输到 NSDictionary:
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
NSLog(@"%@", dict);
但是从控制台看,我觉得字典其实是这样的:
(
"__v" = 0;
"_id" = 52537480b97d2d9117000001;
ctime = "2013-10-08T02:57:04.977Z";
name = "10-701 machine learning";
,
"__v" = 0;
"_id" = 525616b7807f01fa17000001;
ctime = "2013-10-10T02:53:43.776Z";
name = "15-213 computer systems";
)
外面的括号是什么意思?我应该如何进一步将此 NSDictionary 转移到一些 Course 对象的 NSArray 或 NSMutableArray (我自己定义的,尝试表示 JSON 数组的每个元素)?
【问题讨论】:
【参考方案1】:使用此代码,
NSArray *array = [NSJSONSerialization JSONObjectWithData: responseData options:NSJSONReadingMutableContainers error:&error];
NSDictionary *dict = [array objectAtIndex:0];
然后您可以通过以下代码检索值,
NSString *v = [dict objectForKey:@"__v"];
NSString *id = [dict objectForKey:@"_id"];
NSString *ctime = [dict objectForKey:@"ctime"];
NSString *name = [dict objectForKey:@"name"];
【讨论】:
为什么要为按键使用循环?【参考方案2】:括号只是 NSDictionary 输出格式与 JSON 格式不完全相同的结果。您的代码仍然成功地将 JSON 转换为 NSDictionary 对象。
不过,我认为您真正想要的是一系列字典。像这样的:
NSArray *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
NSDictionary *firstObject = [json objectAtIndex:0];
在此之后,firstObject
将包含:
"__v" = 0;
"_id" = 52537480b97d2d9117000001;
"ctime" = "2013-10-08T02:57:04.977Z";
"name" = "10-701 machine learning";
你可以用objectForKey:
检索信息
NSString *time = [firstObject objectForKey:@"ctime"];
// time = "2013-10-08T02:57:04.977Z"
希望对您有所帮助。
【讨论】:
括号表示它是一个字典数组。 为什么使用valueForKey:
?只需使用objectForKey:
或现代语法:NSString *time = firstObject[@"ctime"];
。
valueForKey
最终还是打电话给objectForKey
。细微的语法差异,最适合您的。
这不是一个小的语法差异。 objectForKey:
和 valueForKey:
做不同的事情,有不同的用途。如果您只是想要字典中的键的直接值,请使用objectForKey:
。如果您需要 KVC 的额外开销和功能,请使用 valueForKey:
。
是的,我会继续修改它。以上是关于将 JSON 数组转换为 NSDictionary 后,我该怎么办?的主要内容,如果未能解决你的问题,请参考以下文章
将 JSON 字符串转换为 NSDictionary 时,并非所有键都有效
plist中的NSdictionary对象需要是数组的数组,怎么转换?