json - Swift json 解码丢失 json 对象键顺序

标签 json swift

我有一个简单的 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/

相关文章:

ios - 如何将所有文本字段的值从 View Controller 传递到 Model 类以将模型逻辑与其分离?

php - file_put_contents 在使用 json_encode 时返回 null

ios - 选择/拍摄后如何将图像从相机/相机胶卷传递到新 View ?

xcode - 更新到 xcode 7.0.1 后出现错误 - 追加

php - 使用 AJAX 发送数组的最佳策略

ios - 如果先手动移动,则以编程方式移动 UITableViewCell 会失败

ios - 为宽度约束设置动画时, subview 不会在其父 View 中居中

ios - 使用 Alamofire 验证 JSON 响应

Ruby json解析错误: unexpected token

java - 这是在 Java 中执行查询的好方法吗?