2017-02-18 8 views
-2

Хотите получить массив строк для ключевого заголовка ниже формата ответа JSON. Не хотите использовать итерацию или цикл.Фильтр JSON Data 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

'if let info = try? JSONSerialization.jsonObject (с: данные как данные) { // 3. Выделите все элементы из ответа let arrayAllRecords = (info as? NSDictionary) ?. object (forKey: "items") как! NSArray // 4. Фильтровать все volumeInfo Dictioanry let 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

Спасибо, Bhautik, Ниже также работать для меня. '// 4. Фильтровать все volumeInfo Dictioanry let arrayVolumeInfo = arrayAllRecords.mutableArrayValue (forKey: "volumeInfo") // 5. Фильтр, чтобы получить все заголовки titles = arrayVolumeInfo.mutableArrayValue (forKey: "title") ' –

Смежные вопросы