如何从JSON中提取特定元素

时间:2014-08-30 19:16:45

标签: objective-c arrays json ios7

我的项目中有一个JSON文件:

 {
 "city": [
        {
         "NewYork": [
                          {
                          "url_id": "63",
                          "title": "someTitle"
                          },
                          {
                          "url_id": "62",
                          "title": "someOtherTitle"
                          }
                          ],
         "Boston": [
                          {
                          "url": "68",
                          "title": "someTitle"
                          }
                          ]
   .
   .
   .

然后我尝试在Objective-C中完成它并创建一个仅包含城市名称的数组。我能够记录整个JSON,或者#34;纽约"的属性,而不仅仅是名称。

我的JSON错了还是我在代码中做错了什么?

编辑:我忘了提到有些城市可能有多个ID和标题,所以我相信创建词典是不可能的?此外,我将数据存储在文件中,因此我没有在代码中创建它。

2 个答案:

答案 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