将 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对象需要是数组的数组,怎么转换?

将 Json 转换为 NSDictionary

如何将 Json 转换为 NSDictionary? [关闭]

无法将 NSDictionary 值转换为 json

如何将json字符串转换为元素数组?