为JSON创建嵌套字典



我试图复制json格式的POST请求,但我有麻烦与以下2D字典在Swift工作。

payload = {"cardholder": {
"address": {
"city": "city",
"state": "MA",
"street": "street",
"zip_code": "11111"
},
"shipping_address": {
"city": "city",
"state": "MA",
"street": "street",
"zip_code": "11111"
}
}}

是否有一种方法可以设置addressDetails和shippingDetails?

var addressDetails = ["city": self.newCity!, "state": self.newState!,"street": self.newStreet!,"zip_code": self.newZipcode!]
var shippingDetails = ["city": self.newCity!, "state": self.newState!,"street": self.newStreet!,"zip_code": self.newZipcode!]
if self.newUnit != ""{
addressDetails["unit"] = self.newUnit!
shippingDetails["unit"] = self.newUnit!
}

var test: [String:[String:[String:String]]] = ["cardholder": ["address": addressDetails]]

回答你的问题:是的。您需要做的就是将shippingDetails添加到test["cardholder"]字典中:

var test: [String:[String:[String:String]]] = ["cardholder": ["address": addressDetails, "shipping_address": shippingDetails]]

然而,我完全同意@Paulw11的观点,你不应该这样摆弄字典。使用符合Codable的结构体:

struct Address: Codable {
var city: String
var state: String
var street: String
var zipCode: String
var unit: String?

enum CodingKeys: String, CodingKey {
case city, state, street, zipCode = "zip_code", unit
}
}
struct Cardholder: Codable {
var address: Address
var shippingAddress: Address

enum CodingKeys: String, CodingKey {
case address, shippingAddress = "shipping_address"
}
}
struct Payload: Codable {
var cardholder: Cardholder
}

...
let addressDetails = Address(city: self.newCity!, state: self.newState!, street: self.newStreet!, zipCode: self.newZipcode!, unit: self.newUnit == "" ? nil : self.newUnit)
let shippingDetails = Address(city: self.newCity!, state: self.newState!, street: self.newStreet!, zipCode: self.newZipcode!, unit: self.newUnit == "" ? nil : self.newUnit)
var test = Payload(cardholder: Cardholder(address: addressDetails, shippingAddress: shippingDetails))

最新更新