[英]What determines the order of returned JSON?
如果这不是 Swift 问题,请原谅我,但在这一点上我不知道。
我返回的 JSON 如下所示:
[
{
"name" : _,
"age" : _,
"jobs" : [],
"gender" : _
}
]
但是我的 Codable Struct 看起来像
struct Person: Codable {
let name: String
let age: Int
let gender: String
let jobs: [Job]
}
是随机的还是我没有设置参数还是什么?
JSON 的字典是无序的,如 JSON 规范所定义。 即使您生成的 JSON 具有以特定方式排序的 object 字段,也没有符合 JSON 规范的消费者有义务尊重您的排序。
Swift 的Dictioanry
同样是无序的,并且在每次应用程序启动时播种不同,以抵抗基于 hash 碰撞的 DOS 攻击。
话虽如此,有时尝试以对顺序敏感的方式操作 JSON 可能是有益的,即使规范没有要求。 考虑一个用于操作 JSON 文件的工具示例,这些文件在 git 中受版本控制。
大多数工具的工作方式是读取文件的内容,将其解析为数据结构,操作数据结构,然后将其重新保存到文件中。 这样的过程会导致小的更改(例如添加/删除单个键)以导致条目的完全重新排列,对不相关的空白的更改等,所有这些都会破坏差异。
在这种情况下,使用顺序敏感的解析器和 collections 很有用,它们保留了有关原始文本的足够信息,以便您以最小的方式对其进行操作。
当然,使用这些文件的系统通常会忽略该顺序。
您可以按照字典顺序设置 json 个字符串。如果您有一个 jsonObject,例如数据,那么您可以将其转换为 json 字符串,如下所示:
let jsonString = JSONSerialization.data(withJSONObject: data,
options: JSONSerialization.WritingOptions.sortedKeys)
当您使用 sortedKeys 选项时,json 将指定 output 按字典顺序对键进行排序
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.