为什么iOS将以下内容视为NSDictionary而不是数组?

时间:2012-10-22 14:59:34

标签: ios nsarray nsdictionary

{
 "success":true,
 "listings":
 {
   "50831582253b4acf09000000":
   {
     "id":"50831582253b4acf09000000",
     "title":"fddfds",
     "assets":[],
     "discussions":[]
   }
 },
 "displaymessage":"1 Listings Found"
}

我仍然在字典和数组之间挣扎。什么会使上面的数组?

由于

3 个答案:

答案 0 :(得分:4)

字典和数组之间存在很大差异。字典存储与您在实例化时指定的键相关的数据条目。例如:

NSDictionary *myDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"object1",@"key1",@"object2",@"key2", nil];

这个alloc / inits字典并为“key1”设置“object1”,为“key2”设置“object2”,那么如果你想要求“key1”的值,你可以使用以下内容访问它。 / p>

NSLog(@"%@",[myDictionary objectForKey:@"key1"]);

字典中的对象可以是数组,字典,布尔值,数据,日期,数字和字符串。

另一方面,数组通过数组中的数据索引存储数据:

NSArray *myArray = [[NSArray alloc] initWithObjects:@"object1",@"object2",@"object3", nil];

然后,您可以通过询问objectAtIndex:来访问阵列中的特定数据位,例如:

NSLog(@"%@",[myArray objectAtIndex:1]);

返回“object2”,因为数组中的第一个索引始终为“0”。

答案 1 :(得分:2)

查看JSON文档

JSON数组用方括号

表示
[ "object1", "object2" ]

JSON数组通常由NSArray在Objective-C中表示。这与新的文字语法

匹配
@[ @"object1", @"object2" ]

JSON对象用大括号

表示
{ "key" : "value" }

JSON对象通常由NSDictionary在Objective-C中表示。这也符合新的文字语法

@{ @"key" : @"value" }

答案 2 :(得分:0)

正如您可能知道的那样,列表中的实体或“单元格”用逗号分隔(,)

在序列化字典中,实体通过冒号(:)

分为键:值对
"success":true

冒号前的引号中的第一部分是键,第二部分是与该键对应的值。

序列化数组可能如下所示:

{"hello", "goodbye", "world", "words", "friendship"}

请注意,实体仍然以逗号分隔,但引号之外没有冒号。

另一个关键区别是,在词典中,键必须是唯一的,所以你不应该有这样的东西:

{"success":true, ..., "success":false}

而在数组中,元素不必是唯一的:

{"hello", "hello", "goodbye"}

希望这有助于=)