Swift可编码对象数组

问题描述 投票:-1回答:1

我正在尝试将Swift Encodable结构呈现为以下JSON:

{
   "userID": 1000142,
   "emergencyContactData": {"contact": 
       [
           {"firstName": "John"}, 
           {"lastName": "Doe"},
           {"email": "[email protected]"}, 
           {"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大括号中?

Note:不,我不能更改服务以接受更好的格式,以处理旧版服务。

json swift encode
1个回答
0
投票

结构正确

我认为问题在于您填充结构的方式(问题中未显示)。>>

错误

这是您使用的错误代码,[[我猜。

特别是错误是您填充dictionaries值的方式

let dictionaries = [["firstName" : "John", "lastName": "Doe", "email": "[email protected]", "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":[{"email":"[email protected]","firstName":"John","lastName":"Doe","phone":"12345678901"}]}}

修复

这是您应该使用的正确代码

let dictionaries = [["firstName" : "John"], ["lastName": "Doe"], ["email": "[email protected]"], ["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":"[email protected]"},{"phone":"12345678901"}]}}

© www.soinside.com 2019 - 2024. All rights reserved.