根据嵌套字符串的值过滤JSON

时间:2016-09-27 10:30:29

标签: json swift filter

使用如下的JSON对象,是否可以仅过滤IOS相关内容?我对任何方法都开放,即for-in循环或.filter?

例如,我想过滤以便仅在平台密钥与“IOS”匹配时返回内容,在这种情况下我会得到:

  • Title 1
  • 问题1b
  • IOS

难点在于,只有在平台匹配成功的情况下才能打印标题,并且我无法通过常规嵌套for循环来看到实现此目的的方法。

[
  {
    "title": "Title 1",
    "faqs": [
      {
        "question": "question 1a",
        "platform": "ANDROID"
      },
      {
        "question": "question 1b",
        "platform": "IOS"
      }
    ]
  },
  {
    "title": "Title 2",
    "faqs": [
      {
        "question": "question 2a",
        "platform": "ANDROID"
      },
      {
        "question": "question 2b",
        "platform": "WEB"
      }
    ]
  }
]

2 个答案:

答案 0 :(得分:0)

简单(Swift 3)解决方案,data是JSON字符串Data

  do {
    if let jsonObject = try JSONSerialization.jsonObject(with:data, options: []) as? [[String:Any]] {
      for item in jsonObject {
        if let title = item["title"] as? String,
           let faqs = item["faqs"] as? [[String:String]],
           let iOSFaqs = faqs.filter({$0["platform"] == "IOS"}).first {
             print(title)
             print(iOSFaqs)
        }
      }
    }
  } catch let error as NSError {
    print(error)
  }

答案 1 :(得分:0)

您可以使用NSPredicate来过滤字典数组。 您可以参考这些较旧的问题作为示例。这不完全是"纯粹的快速方式",但完成工作。代码在Objective C中,但可以很容易地转换为Swift语法。如果您需要帮助,我可以稍后再解答。 Link 1 Link 2