如何在swift中反序列化下面的JSON响应?

如何在swift中反序列化下面的JSON响应?,json,swift,dictionary,json-deserialization,Json,Swift,Dictionary,Json Deserialization,我有一个json响应。我对如何反序列化它有点困惑。我想从下面的json响应中提取Id和名称,并将它们作为键值对存储在字典中 JSON响应 ("[{\"attributes\":{\"type\":\"User\",\"url\":\"/services/data/v1.0/objects/User/01234\"},\"Id\":\"01234\",\"Name\":\"User1\",\"RecordTypeId\":\"1\"},{\"attributes\":{\"type\":\"Use

我有一个json响应。我对如何反序列化它有点困惑。我想从下面的json响应中提取Id和名称,并将它们作为键值对存储在字典中

JSON响应

("[{\"attributes\":{\"type\":\"User\",\"url\":\"/services/data/v1.0/objects/User/01234\"},\"Id\":\"01234\",\"Name\":\"User1\",\"RecordTypeId\":\"1\"},{\"attributes\":{\"type\":\"User\",\"url\":\"/services/data/v1.0/objects/User/01235\"},\"Id\":\"01235\",\"Name\":\"User2\",\"RecordTypeId\":\"2\"},{\"attributes\":{\"type\":\"User\",\"url\":\"/services/data/v1.0/objects/User/01236\"},\"Id\":\"01236\",\"Name\":\"User3\",\"RecordTypeId\":\"3\"},{\"attributes\":{\"type\":\"User\",\"url\":\"/services/data/v1.0/objects/User/01237\"},\"Id\":\"01237\",\"Name\":\"User4\",\"RecordTypeId\":\"4\"}]")
我想从上面的json响应中提取id和name值,并将它们存储在下面这样的字典中


dict=[01234:“User1”,01235:“User2”,01236:“User3”,01237:“User4”]

服务器的响应看起来像一个数组,因此您可以将其反序列化为类似于
[String]
的内容

然后定义一个与该数组中的json对应的结构,如下所示:

struct ResponseElement: Codable {
  struct attributes : Codable {
     let type, url: String
  }
  let Id, Name, RecordTypeId: String
}
然后使用以下命令对其进行解码:
JSONDecoder().decode([ResponseElement].self,

最后,检查JSON中的每个元素以填充字典,字典的类型为
[Int:String]

我在操场上进行了测试,完整代码如下:

import Foundation

let serverResponse: [String] = [
   "[{\"attributes\":{\"type\":\"User\",\"url\":\"/services/data/v1.0/objects/User/01234\"},\"Id\":\"01234\",\"Name\":\"User1\",\"RecordTypeId\":\"1\"},{\"attributes\":{\"type\":\"User\",\"url\":\"/services/data/v1.0/objects/User/01235\"},\"Id\":\"01235\",\"Name\":\"User2\",\"RecordTypeId\":\"2\"},{\"attributes\":{\"type\":\"User\",\"url\":\"/services/data/v1.0/objects/User/01236\"},\"Id\":\"01236\",\"Name\":\"User3\",\"RecordTypeId\":\"3\"},{\"attributes\":{\"type\":\"User\",\"url\":\"/services/data/v1.0/objects/User/01237\"},\"Id\":\"01237\",\"Name\":\"User4\",\"RecordTypeId\":\"4\"}]"
]

struct ResponseElement: Codable {
  struct attributes : Codable {
     let type, url: String
  }
  let Id, Name, RecordTypeId: String
}

var dict:[Int:String] = [:]

if let serverResponseAsData = serverResponse[0].data(using: .utf8),
  let response = try? JSONDecoder().decode([ResponseElement].self, from: serverResponseAsData) {
  response.forEach { element in
     if let idAsInt = Int(element.Id) {
        dict[idAsInt] = element.Name
     }
  }
}

print(dict)
这张照片是:

[1235:“用户2”,1237:“用户4”,1236:“用户3”,1234:“用户1”]


您显示为从服务器收到的内容不是JSON@JAAulde那是什么?我不知道。我以前什么都没见过。@JAAulde看看我更新的问题也许你做错了什么,我建议你试着用邮递员之类的工具来检查回复数据。如果邮递员也会返回你分享的类似内容,那么就和t他写这个服务是因为它不是json。