Json 可快速编码的对象数组

Json 可快速编码的对象数组,json,swift,encode,Json,Swift,Encode,我正在尝试将Swift可编码结构呈现给以下JSON: { "userID": 1000142, "emergencyContactData": {"contact": [ {"firstName": "John"}, {"lastName": "Doe"}, {"email": "john.doe567@gmail.com"}, {"phone": "12345678901"}

我正在尝试将Swift可编码结构呈现给以下JSON:

{
   "userID": 1000142,
   "emergencyContactData": {"contact": 
       [
           {"firstName": "John"}, 
           {"lastName": "Doe"},
           {"email": "john.doe567@gmail.com"}, 
           {"phone": "12345678901"}
       ]
   }
}
我尝试了以下方法:

struct UserEmergencyContactRequest: Encodable {
    var userID: String
    var ecData: EmergencyContactData
}

struct EmergencyContactData: Encodable {
    var contact: [[String: String]]
}
但是,单个String:String字典条目不会呈现给JSON对象(没有花括号)。如何更改[String:String]条目,以便在将其呈现为JSON结构时,单个String:String值将包含在一组JSON花括号中

注意:不,我无法更改服务以接受更好的格式,处理遗留服务。

结构正确 我认为问题在于填充结构的方式(问题中没有显示)

错误 我猜你使用的是错误的代码

具体而言,错误在于填充
词典
值的方式。实际上,您正在创建一个包含所有值的单个字典的数组。相反,您应该创建一个字典数组,其中每个字典有一个条目

修复 如上所述,让我们尝试在每本词典中输入一个条目

let dictionaries = [["firstName" : "John"], ["lastName": "Doe"], ["email": "john.doe567@gmail.com"], ["phone": "12345678901"]]

let ecData = EmergencyContactData(contact: dictionaries)
let elm = UserEmergencyContactRequest(userID: "userID", ecData: ecData)

if  let data = try? JSONEncoder().encode(elm),
    let string = String(data: data, encoding: .utf8) {
    print(string)
}
现在我们得到了预期的结果

{"userID":"userID","ecData":{"contact":[{"firstName":"John"},{"lastName":"Doe"},{"email":"john.doe567@gmail.com"},{"phone":"12345678901"}]}}
{"userID":"userID","ecData":{"contact":[{"firstName":"John"},{"lastName":"Doe"},{"email":"john.doe567@gmail.com"},{"phone":"12345678901"}]}}