什么决定了返回的 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 的更改等,所有这些都会破坏差异.

在这种情况下,使用顺序敏感的解析器和集合会很有用,它们会保留有关原始文本的足够信息,以便您以最少的方式对其进行操作。

当然,使用这些文件的系统通常会忽略顺序。