Swift Codable:是否可以按 json 响应中返回的顺序获取字典 key:values?
Swift Codable: Is it possible to get dictionary key:values in order returned in json response?
我收到了 JSON 这样的回复
"dict": [
"key1" : "val1",
"key2" : "val2",
...
]
服务器总是returns这个字典以有序的方式key1,key2,...
是否可以按顺序解析此字典。
我可以用
try container.decode([String: String].self, forKey: .dict)
但这是无序解析
我也尝试获取像
这样的嵌套容器
try container.nestedContainer(keyedBy: DynamicCodingKey.self, forKey: .dict)
struct DynamicCodingKey: CodingKey {
var stringValue: String
var intValue: Int?
init?(intValue: Int) {
self.intValue = intValue
self.stringValue = "\(intValue)"
}
init?(stringValue: String) {
self.stringValue = stringValue
self.intValue = Int(stringValue)
}
}
但是 KeyedDecodingContainer<DynamicCodingKey>
似乎也存储无序键,当我使用 .allKeys
像标准哈希表一样获取它们时。
Server always returns this dict in ordered manner key1, key2, ... Is it possible to parse this dict in ordered manner.
没有。 字典本质上是无序集合。如果您从字典中获取键数组,它们可能会以与 JSON 中相同的顺序返回。这甚至可能持续发生。但是你不应该指望它,因为字典是无序的集合。如果您依赖特定的订单,那么您应该让服务器发送一个数组而不是字典。
我收到了 JSON 这样的回复
"dict": [
"key1" : "val1",
"key2" : "val2",
...
]
服务器总是returns这个字典以有序的方式key1,key2,... 是否可以按顺序解析此字典。
我可以用
try container.decode([String: String].self, forKey: .dict)
但这是无序解析
我也尝试获取像
这样的嵌套容器try container.nestedContainer(keyedBy: DynamicCodingKey.self, forKey: .dict)
struct DynamicCodingKey: CodingKey {
var stringValue: String
var intValue: Int?
init?(intValue: Int) {
self.intValue = intValue
self.stringValue = "\(intValue)"
}
init?(stringValue: String) {
self.stringValue = stringValue
self.intValue = Int(stringValue)
}
}
但是 KeyedDecodingContainer<DynamicCodingKey>
似乎也存储无序键,当我使用 .allKeys
像标准哈希表一样获取它们时。
Server always returns this dict in ordered manner key1, key2, ... Is it possible to parse this dict in ordered manner.
没有。 字典本质上是无序集合。如果您从字典中获取键数组,它们可能会以与 JSON 中相同的顺序返回。这甚至可能持续发生。但是你不应该指望它,因为字典是无序的集合。如果您依赖特定的订单,那么您应该让服务器发送一个数组而不是字典。