Ios 将JSON数组转换为NSDictionary后,我应该做什么?

Ios 将JSON数组转换为NSDictionary后,我应该做什么?,ios,objective-c,arrays,json,nsdictionary,Ios,Objective C,Arrays,Json,Nsdictionary,我需要以以下格式解析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:

我需要以以下格式解析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";
    }
)
NSArray *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
NSDictionary *firstObject = [json objectAtIndex:0];
外面的括号是什么意思?我应该如何进一步将此NSDictionary传输到一些课程对象的NSArray或NSMutableArray(我自己定义的,尝试表示JSON数组的每个元素)?

使用以下代码

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"];

括号只是NSDictionary输出格式与JSON格式不完全相同的结果。您的代码仍然成功地将JSON转换为NSDictionary对象

我想你真正想要的是一系列字典。大概是这样的:

(
        {
        "__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";
    }
)
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:
。是的,我会继续更改它。