Разбор JSONArray содержит JSONObjects Swift - PullRequest
0 голосов
/ 06 мая 2018

Привет, я новичок в Swift, и у меня есть ответJson от alamofire состоит из jsonArray содержат jsonObjects, как это

[{"id":"1","name":"person1"},{"id":"2","name":"person2"}]

как я могу разобрать его в массив этой пользовательской модели

class Person {
  var name : String
  var id : String
}

Я много занимался поиском, но не могу найти случай, идентичный моему, и я не могу использовать Codable, потому что я использую xcode 8 и не могу обновить свою версию xcode до 9 сейчас

Я получаю ответ, подобный этому

Alamofire.request(url).responseJSON{ response in
            if(response.result.isSuccess)
            {
                if let jsonarray = response.result.value as? [[String: Any]] 
                    {
                      //what to do here ?
                    }
            }
        }

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

@ Тони,

В swift4 вы можете кодируемый протокол для анализа JSON, который помогает в написании универсального кода. Предположим, если в будущем появилось требование добавить dob, чем это очень просто. А в swift3 вы можете использовать класс сопоставления объектов для того же.

Если вам нужна дополнительная помощь, пожалуйста, дайте мне знать.

0 голосов
/ 06 мая 2018
if let jsonarray = response.result.value as? [[String: Any]]{
    //what to do here ?
    var persons:[Person] = []
    for userDictionary in jsonarray{
        guard let id = userDictionary["id"] as? String, let name = userDictionary["name"] as? String else { continue }
        persons.append(Person(id, name))
    }
    //Persons complete.
}

Используйте guard else для требуемых переменных. Если есть дополнительные переменные, которые могут быть необязательными, например var age:Int? в Person, вы можете сделать так:

for userDictionary in jsonarray{
    guard let id = userDictionary["id"] as? String, let name = userDictionary["name"] as? String else { continue }
    let age = userDictionary["age"] as? Int
    persons.append(Person(id, name, age))
}
...