我有一个简单的 JSON 对象:
{
"values": {
"a":"",
"b":"",
"c":"",
"d":"",
"e":""
}
}
我想以这样的方式将它解码为 Swift 结构,我以后可以以与接收到的完全相同的顺序遍历 values
中的键JSON 对象。
这在 Swift 中可能吗?
我的尝试如下:
let json = "{ \"values\": { \"a\":\"\", \"b\":\"\", \"c\":\"\", \"d\":\"\", \"e\":\"\" } }"
struct JSS: Codable {
var values: [String: String?]?
}
let data = json.data(using: .utf8)
do {
let decoder = JSONDecoder()
let jss = try decoder.decode(JSS.self, from: data!)
jss.values?.map { print("\($0.key)") }
}
catch {
}
将打印:
b
e
a
d
c
最佳答案
这本身并不是 Swift 的限制。 Swift 和 JSON 字典都是无序的。 JSON 格式不保证键顺序,因此不需要解析器保留顺序。
如果你需要一个有序的集合,你最好在 JSON 中返回一个键值对数组:
{
"values": [
{"a" : ""},
{"b" : ""},
{"c" : ""},
{"d" : ""},
{"e" : ""}
]
}
然后以正确的顺序存储键,以便能够根据需要迭代它们。
关于json - Swift json 解码丢失 json 对象键顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48999112/