【问题标题】:Iterating Though NSDictionary that has JSON Data通过具有 JSON 数据的 NSDictionary 进行迭代
【发布时间】:2015-06-12 00:19:42
【问题描述】:

所以我有一个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 的新手。有点不知所措。我最终需要从字典中的每个唯一对象中获取名称和图像信息,因此我必须遍历字典。

【问题讨论】:

  • 显示代码以及崩溃跟踪和消息
  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。跨度>
  • 访问 json.org 并学习 JSON 语法。

标签: ios objective-c json nsdictionary


【解决方案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
}

【讨论】:

    【解决方案2】:

    您需要了解 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

    现在你应该首先注意结构,比如里面是什么。然后进行相应的解析。

    让我们说一下上面的例子。最外面的对象是NSDictionary ({})。

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

    在里面我们有一个NSArray([])

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

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

    【讨论】:

    • 让我知道你有什么不明白的,我也许可以解释更多
    • 添加了更多解释。
    猜你喜欢
    • 2017-06-15
    • 2021-12-12
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    • 2018-08-03
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多