我的项目中有一个JSON文件:
{
"city": [
{
"NewYork": [
{
"url_id": "63",
"title": "someTitle"
},
{
"url_id": "62",
"title": "someOtherTitle"
}
],
"Boston": [
{
"url": "68",
"title": "someTitle"
}
]
.
.
.
然后我尝试在Objective-C中完成它并创建一个仅包含城市名称的数组。我能够记录整个JSON,或者#34;纽约"的属性,而不仅仅是名称。
我的JSON错了还是我在代码中做错了什么?
编辑:我忘了提到有些城市可能有多个ID和标题,所以我相信创建词典是不可能的?此外,我将数据存储在文件中,因此我没有在代码中创建它。
答案 0 :(得分:0)
您必须首先创建一个包含城市密钥的字典,并且城市密钥必须分配给数组。
NSDictionary *newYorkDict = {
@"url_id":@"63",
@"title":@"someTitle"
};
NSDictionary *bostonDict = {@"url_id":@"63",
@"title":@"someTitle"
};
NSArray *newYorkArray = [newYorkDict];
NSArray *bostonArray = [bostonDict];
NSDictionary *dict = {
@"New york":newYorkArray,
@"Boston":bostonArray
};
NSArray *cityArray = [dict];
NSDictionary *mainDict = {@"city":cityArray};
答案 1 :(得分:0)
这个JSON看起来不太对劲。 cities
值应该只是一个字典:
{
"cities" : {
"Boston" : [
{
"url_id" : "63",
"title" : "someTitle"
},
{
"url_id" : "62",
"title" : "someOtherTitle"
}
],
"New York" : [
{
"url_id" : "63",
"title" : "someTitle"
},
{
"url_id" : "62",
"title" : "someOtherTitle"
}
]
}
}
如果您想从上面的JSON获取城市名称数组,您可以将其转换为字典,并使用allKeys
键返回的值的cities
:
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
NSArray *cityNames = [dictionary[@"cities"] allKeys];
就个人而言,我认为最好将JSON中的cities
值设为字典数组,其中城市名称是字典的属性:
{
"cities" : [
{
"name" : "New York",
"urls" : [
{
"url_id" : "63",
"title" : "someTitle"
},
{
"url_id" : "62",
"title" : "someOtherTitle"
}
]
},
{
"name" : "Boston",
"urls" : [
{
"url_id" : "63",
"title" : "someTitle"
},
{
"url_id" : "62",
"title" : "someOtherTitle"
}
]
}
]
}
在这种情况下,你会像这样检索城市名称:
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
NSArray *cityNames = [dictionary[@"cities"] valueForKey:@"name"];
但问题中提出的JSON似乎有一些多余的[
,恕我直言。我认为city
的关键名称具有误导性,因为它包含多个城市,因此我建议使用cities
。