什么决定了返回的 JSON 的顺序?
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 具有以特定方式排序的对象字段,任何符合 JSON 规范的消费者都没有义务尊重您的排序。
Swift 的 Dictioanry
同样是无序的,并且在每次应用程序启动时以不同的方式播种,以抵抗基于散列冲突的 DOS 攻击。
也就是说,有时尝试以顺序敏感的方式操纵 JSON 可能是有益的,即使规范没有要求也是如此。考虑一个工具的示例,该工具旨在操作 JSON 文件,这些文件在 git.
中受版本控制
大多数工具的工作方式是读取文件内容,将其解析为数据结构,处理数据结构,然后将其重新保存到文件中。这样的过程会导致一个小的变化(比如 adding/removing 一个键)导致条目的完全重新排列,对不相关的 white-space 的更改等,所有这些都会破坏差异.
在这种情况下,使用顺序敏感的解析器和集合会很有用,它们会保留有关原始文本的足够信息,以便您以最少的方式对其进行操作。
当然,使用这些文件的系统通常会忽略顺序。
如果这不是 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 具有以特定方式排序的对象字段,任何符合 JSON 规范的消费者都没有义务尊重您的排序。
Swift 的 Dictioanry
同样是无序的,并且在每次应用程序启动时以不同的方式播种,以抵抗基于散列冲突的 DOS 攻击。
也就是说,有时尝试以顺序敏感的方式操纵 JSON 可能是有益的,即使规范没有要求也是如此。考虑一个工具的示例,该工具旨在操作 JSON 文件,这些文件在 git.
中受版本控制大多数工具的工作方式是读取文件内容,将其解析为数据结构,处理数据结构,然后将其重新保存到文件中。这样的过程会导致一个小的变化(比如 adding/removing 一个键)导致条目的完全重新排列,对不相关的 white-space 的更改等,所有这些都会破坏差异.
在这种情况下,使用顺序敏感的解析器和集合会很有用,它们会保留有关原始文本的足够信息,以便您以最少的方式对其进行操作。
当然,使用这些文件的系统通常会忽略顺序。