Swift json解码失去了json对象键顺序

时间:2018-02-27 00:09:06

标签: json swift

我有一个简单的JSON对象:

{
    "values": {
        "a":"",
        "b":"",
        "c":"",
        "d":"",
        "e":""
    }
}

我希望以这种方式将它解码为Swift结构,以后我可以按照与收到JSON对象完全相同的顺序迭代values中的键。 /强>

这可以在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

1 个答案:

答案 0 :(得分:0)

以下内容不起作用所以,您不要浪费时间尝试:

回到旧的方式,使用JSONSerialization.jsonObject(with: Data, options: JSONSerialization.ReadingOptions) -> Any

它确实保持顺序.... 直到您将json?["values"]投射到[String: Any]中。此时,Cezar在上面answer中所说的进入了场景:字典是无序的。

以下屏幕截图显示,直到json?["values"]Any为止,顺序一直保存在字符串描述中。

Playground demo