迭代虽然NSDictionary有JSON数据

时间:2015-06-12 00:19:42

标签: ios objective-c json nsdictionary

所以我有一个NSDictionary来保存JSON数据,执行以下操作:

NSDictionary* dictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&someError];

当我NSLog我的字典时,我得到下面的输出。

2015-06-11 17:13:49.699 AmigoDash[57994:1195566] (
        {
        "_id" =         {
            "$id" = 5579fde2e4b0588ab009f841;
        };
        hours = "10-11";
        image = imageURL;
        name = "Boleskine Bistro";
    },
        {
        "_id" =         {
            "$id" = 5579fe1fe4b0588ab009f84a;
        };
        hours = "9-11";
        image = imageURL;
        name = Amrikos;
    }
)

我现在面临的问题是试图遍历字典。当我尝试这样做时,代码崩溃了。我刚开始使用JSON和iOS。有点不知所措。我最终需要从字典中的每个唯一对象获取名称和图像信息,因此我必须遍历字典。

2 个答案:

答案 0 :(得分:1)

从您的日志中,您的json是一个数组

我认为使用keyPath很容易

NSArray * array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&someError];
NSArray * namesArray = [array valueForKeyPath:@"name"]; //This will get a names array
NSArray * urlArray = [array valueForKeyPath:@"image"]; //This will get a url Array

如果你还想循环

NSArray * array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&someError];
for (NSDictionary * dic in array) {
    NSString * name = [dic valueForKey:@"name"];
    NSString * hours = [dic valueForKey:@"hours"];
    //So on
}

答案 1 :(得分:0)

您需要了解JSON组件的基础知识以及如何将其解析为iOS。我会给你一个简单的例子here。我通常用于解析JSON

{[
  {
    "array": [
      1,
      2,
      3
    ],
    "boolean": true,
    "null": null,
    "number": 123,
    "object": {
      "a": "b",
          "c": "d",
      "e": "f"
    },
    "string": "Hello World"
  },
  {
    "array": [
      1,
      2,
      3
    ],
    "boolean": true,
    "null": null,
    "number": 123,
    "object": {
      "a": "b",
      "c": "d",
      "e": "f"
    },
    "string": "Hello World"
  }
]}

这是您将获得的一般JSON。

这些解析如下

  1. []表示array被解析为NSArray
  2. {}表示dictionary被解析为NSDictionary
  3. truefalseBOOL
  4. 123,32等是intNSIntegerNSNumber
  5. ""的文字适用于NSString
  6. 现在你应该首先注意结构,比如内在的结构。然后解析。

    上面举例说。最外面的对象是NSDictionary{})。

     NSDictionary *cityJSON = [NSJSONSerialization JSONObjectWithData:**Above JSON Data**];
    

    我们内部有一个NSArray[]

    NSArray *testFeeds = [NSJSONSerialization JSONObjectWithData: cityData options:NSJSONReadingMutableContainers error:nil];
    

    每个testFeeds对象都是NSDictionary。我们从最外层到最里面的对象。