在Swift中循环通过JSON对象

时间:2017-11-16 09:47:21

标签: json swift xcode

我得到了这个JSON对象,我从服务器发送到Swift应用程序。

{
  "625289": {
    "id": 1,
    "subject": "Hello World"
  },
  "625277": {
    "id": 2,
    "subject":"Bye World!"
  }
}

所以我尝试通过在Swift课程中执行以下操作来获得每个结果(“625289”和“625277”)的主题:

struct Resultat : Decodable   {
  let subject: String
}

var result = [Resultat]()
let urlll = URL(string:"http://localhost:8888/api/pouet.php")

URLSession.shared.dataTask(with: urlll!) { (data, response, error) in
  do {
    print("coucoulol")
    //print(response)

    self.result = try JSONDecoder().decode([Resultat].self, from: data!)

    print(self.result)

    for eachTicket in self.result {
      print(eachTicket.subject)
    }
  } catch {
    print("error"+error.localizedDescription)
  }
}.resume()

但是,当我尝试执行代码时,它说“数据无法读取,因为它的格式不正确”。根据我的理解,代码中的循环足以获取数组中的值,或者我错了。感谢任何帮助。谢谢。

2 个答案:

答案 0 :(得分:3)

根对象是字典。您可以将对象解码为[String:Resultat]。该词典还包含词典。不涉及数组。

struct Resultat : Decodable {
    let subject: String
    let id : Int
}
...
let result = try JSONDecoder().decode([String:Resultat].self, from: data!)
for (key, value) in result {
    print(key, value.subject)
}

答案 1 :(得分:1)

您可以尝试使用下面的 SwiftyJSON

$ 0.0 =密钥

$ 0.1 =价值

let data = JSON(result)
data.dictionaryValue.forEach({
     print($0.1)
})