Объекты внутри массива внутри объекта Swift - PullRequest
0 голосов
/ 17 сентября 2018

Может ли кто-нибудь помочь с анализом JSON-объекта такого типа?

{  
   "array":[  
      {  
         "title":"",
         "desc":""
      },
      {  
         "title":"",
         "desc":""
      },
      {  
         "title":"",
         "desc":""
      }
   ]
}

Мой код не работает

let task = self.session.dataTask(with: url) {
        data, response, error in
        if let data = data,
            let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
            for case let announcment in json!["array"]{
                guard let title = announcment["title"] as? String,
                    let description = announcment["desc"] as? String,
                else{ return }
    }
    task.resume()

Заранее благодарен за любую помощь!

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Вы можете структурировать свои данные и сделать их кодируемыми:

struct Root: Codable {
    let array: [Announcement]
}
struct Announcement: Codable {
    let title: String
    let desc: String
}

let data = Data("""
{"array":[{"title":"","desc":""},{"title":"","desc":""},{"title":"","desc":""}]}
""".utf8)

do {
    let announcements = try JSONDecoder().decode(Root.self, from: data).array
    for announcement in announcements {
        print(announcement)
    }
} catch {
    print(error)
}

Это напечатает

Announcement(title: "", desc: "")
Announcement(title: "", desc: "")
Announcement(title: "", desc: "")
0 голосов
/ 17 сентября 2018

Красивая печать вашего JSON упрощает работу:

{
   "array":[
      {
         "title":"",
         "desc":""
      },
      {
         "title":"",
         "desc":""
      },
      {
         "title":"",
         "desc":""
      }
   ]
}

Сначала вам нужно получить массив.Массив словарей имеет тип [[String: Any]].

let task = self.session.dataTask(with: url) {
    data, response, error in
    if let data = data,
        let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
            guard let announcements = json["array"] as? [[String: Any]] 
                else { return }

            announcements.forEach { announcement in
            guard let title = announcement["title"] as? String,
                let description = announcement["desc"] as? String
                else { return }
            // Do something with the result
            }
       }
  }
task.resume()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...