为 JSON 创建嵌套字典
Creating nested dictionary for JSON
我正在尝试为 POST 请求复制 json 格式,但在 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 的观点,你不应该fiddle那样处理字典。使用符合 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))
我正在尝试为 POST 请求复制 json 格式,但在 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 的观点,你不应该fiddle那样处理字典。使用符合 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))