2017-02-18 148 views
-2

想要从JSON响应格式以下获取关键标题的字符串数组。 不想使用迭代或循环。过滤器JSON数据Swift

[{ 
     "kind": "books#volume", 
     "id": "D7bKNFMXNOAC", 
     "volumeInfo": { 
      "title": "Apples", 
       "other":"Value" 
     } 
}, 
{ 
     "kind": "books#volume", 
     "id": “HGHGDKJSDKJH”, 
     "volumeInfo": { 
      "title": "Banana", 
       "other":"Value" 
     } 
}, 
{ 
     "kind": "books#volume", 
     "id": “JFHDFHKSHFD”, 
     "volumeInfo": { 
      "title": "Orange", 
       "other":"Value" 
     } 
}] 

期待:阵列 - [“苹果”,“香蕉”,“橙”]。

+0

告诉我们你试过的东西,你是如何得到这个JSON的。 –

+0

'如果让info = try? JSONSerialization.jsonObject(以:data作为数据){ // 3。从响应中挑选出所有项目 让arrayAllRecords =(info as?NSDictionary)?. object(forKey:“items”)as! NSArray // 4。过滤所有volumeInfo Dictioanry 让arrayVolumeInfo = arrayAllRecords.mutableArrayValue(forKey: “volumeInfo”) // 5。筛选以获得所有标题 titles = arrayVolumeInfo.mutableArrayValue(forKey:“title”) }' –

回答

1

请看下面的例子。你可以使用flatMap func来获得一系列'标题'。

let json = [ 
     [ 
      "kind": "books#volume", 
      "id": "D7bKNFMXNOAC", 
      "volumeInfo": [ 
       "title": "Apples", 
       "other":"Value" 
      ] 
     ], 
     [ 
      "kind": "books#volume", 
      "id": "HGHGDKJSDKJH", 
      "volumeInfo": [ 
       "title": "Banana", 
       "other":"Value" 
      ] 
     ], 
     [ 
      "kind": "books#volume", 
      "id": "JFHDFHKSHFD", 
      "volumeInfo": [ 
       "title": "Orange", 
       "other":"Value" 
      ] 
     ] 
    ] 

    let titles = json.flatMap { ($0["volumeInfo"] as! [String : Any])["title"] } 
    print(titles) //["Apples", "Banana", "Orange"] 
+0

Thanks,Bhautik, 下面也适用于我。 '// 4。过滤所有volumeInfo Dictioanry let arrayVolumeInfo = arrayAllRecords.mutableArrayValue(forKey:“volumeInfo”) // 5。筛选以获取所有标题 titles = arrayVolumeInfo.mutableArrayValue(forKey:“title”)' –