2016-09-27 58 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