Swift 可编码对象数组
Swift Encodable Array of Objects
我正在尝试将 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 大括号中?
注意:不,我不能改变服务以接受更好的格式,处理遗留服务。
结构正确
我认为问题在于您填充结构的方式(未在您的问题中显示)。
错误
这是我猜您使用的错误代码。
Specifically the error is in the way you are populating the dictionaries
value. Infact you are creating a an array with a single dictionary having all the values. Instead you should create an array of dictionaries where each dictionary has 1 single entry.
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":[{"email":"john.doe567@gmail.com","firstName":"John","lastName":"Doe","phone":"12345678901"}]}}
修复
如上所述,让我们尝试在每个字典中放入 1 个条目。
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"}]}}
我正在尝试将 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 大括号中?
注意:不,我不能改变服务以接受更好的格式,处理遗留服务。
结构正确
我认为问题在于您填充结构的方式(未在您的问题中显示)。
错误
这是我猜您使用的错误代码。
Specifically the error is in the way you are populating the
dictionaries
value. Infact you are creating a an array with a single dictionary having all the values. Instead you should create an array of dictionaries where each dictionary has 1 single entry.
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":[{"email":"john.doe567@gmail.com","firstName":"John","lastName":"Doe","phone":"12345678901"}]}}
修复
如上所述,让我们尝试在每个字典中放入 1 个条目。
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"}]}}