基于嵌套字符串的值筛选JSON

基于嵌套字符串的值筛选JSON,json,swift,filter,Json,Swift,Filter,使用如下所示的JSON对象,是否可以只过滤与IOS相关的内容?我对任何方法都持开放态度,例如,用于循环或.filter 例如,我希望进行筛选,以便仅当平台密钥与“IOS”匹配时才返回内容,在这种情况下,我将获得: 标题1 问题1b IOS 困难在于,只有在平台匹配成功的情况下才能打印标题,而我看不到通过常规嵌套for in循环实现这一点的方法 [ { "title": "Title 1", "faqs": [ { "question": "qu

使用如下所示的JSON对象,是否可以只过滤与IOS相关的内容?我对任何方法都持开放态度,例如,用于循环或.filter

例如,我希望进行筛选,以便仅当平台密钥与“IOS”匹配时才返回内容,在这种情况下,我将获得:

  • 标题1
  • 问题1b
  • IOS
困难在于,只有在平台匹配成功的情况下才能打印标题,而我看不到通过常规嵌套for in循环实现这一点的方法

[
  {
    "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"
      }
    ]
  }
]
简单(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)
  }
简单(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)
  }

可以使用NSPredicate筛选字典数组。 你可以参考这些老问题的例子。这并不完全是“纯粹的快速方式”,而是完成了任务。代码是用Objective C编写的,但是可以很容易地翻译成Swift语法。如果你需要这方面的帮助,我可以稍后再回答。

您可以使用NSPredicate筛选字典数组。 你可以参考这些老问题的例子。这并不完全是“纯粹的快速方式”,而是完成了任务。代码是用Objective C编写的,但是可以很容易地翻译成Swift语法。如果你需要这方面的帮助,我可以稍后再回答。

谢谢。我喜欢这个解决方案,但不幸的是我们还不能更新到Swift 3。很抱歉,我应该对此进行明确说明。在Swift 2中,只有一个小小的更改
尝试NSJSONSerialization.JSONObjectWithData(数据,选项:[])
,您可以省略可选绑定链中的第二个和第三个
let
。谢谢。我喜欢这个解决方案,但不幸的是我们还不能更新到Swift 3。很抱歉,我应该对此进行明确说明。在Swift 2中,只有一个小小的更改
尝试NSJSONSerialization.JSONObjectWithData(数据,选项:[])
,您可以省略可选绑定链中的第二个和第三个
let