2016-09-27 67 views
1

对于如下的JSON对象,是否可以仅过滤与IOS相关的内容?我对任何方法都开放,例如for-in循环或.filter?根据嵌套字符串的值过滤JSON

例如,我会想过滤器,使我回的内容,只有当该平台的关键是“IOS”匹配,在这种情况下,我会得到:

  • 标题1
  • 问题1B
  • IOS

的困难在于,如果平台匹配成功的标题应该只被打,我不能看到一个普通的嵌套实现这在循环的一种方式。

[ 
    { 
    "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" 
     } 
    ] 
    } 
] 

回答

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) 
    } 
+0

谢谢。我喜欢这个解决方案,但不幸的是我们无法更新到Swift 3。我应该明确表示这一点,对不起。 –

+0

在Swift 2中,只有一个小改动'尝试NSJSONSerialization.JSONObjectWithData(data,options:[])',并且可以省略可选绑定链中的第二个和第三个'let'。 – vadian

0

可以使用NSPredicate过滤字典的阵列。 你可以参考这些老问题的例子。这并不完全是“纯粹的快捷方式”,而是完成了工作。代码在Objective C中,但它可以很容易地转换成Swift语法。如果你需要帮助,我可以在以后延长答案。 Link 1 Link 2