为什么JSON规范仍然不是';t fixed强制将对象中的键值对视为有序?

为什么JSON规范仍然不是';t fixed强制将对象中的键值对视为有序?,json,serialization,dataformat,language-specifications,Json,Serialization,Dataformat,Language Specifications,这样做的理由似乎非常充分: 在许多情况下,保持JSON对象字段顺序的要求非常常见。只要上网搜索就可以了 即使是当前的JS引擎现在也能保证订单,也许在实现后它就足够有用了 规范中的此类变更至少是向前兼容的 传输的键值对以序列化格式排序,为什么不使用它呢?虽然订单可以免费表示,但我们不得不忽略它,并在当前JSON规范中应用难看的变通方法 您知道没有此类问题的JSON的任何可行替代方案,或者如何修复此JSON怪癖?问题是什么?没有什么可以阻止您以保证的顺序序列化JSON。不知道你需要应用什么丑陋的变通

这样做的理由似乎非常充分:

  • 在许多情况下,保持JSON对象字段顺序的要求非常常见。只要上网搜索就可以了
  • 即使是当前的JS引擎现在也能保证订单,也许在实现后它就足够有用了
  • 规范中的此类变更至少是向前兼容的
  • 传输的键值对以序列化格式排序,为什么不使用它呢?虽然订单可以免费表示,但我们不得不忽略它,并在当前JSON规范中应用难看的变通方法

  • 您知道没有此类问题的JSON的任何可行替代方案,或者如何修复此JSON怪癖?

    问题是什么?没有什么可以阻止您以保证的顺序序列化JSON。不知道你需要应用什么丑陋的变通方法。规范确实阻止了你。标准解析器稍后读取的非标准json将放弃排序。这取决于您使用的解析器。我接触的大多数人要么维持秩序,要么选择维持秩序。最常见的例子是最近的JS引擎。您还声明“订单可以免费表示”。虽然序列化JSON格式是这样,但大多数语言中使用的底层数据结构并非如此。例如,对于Java,我将不得不开始使用
    LinkedHashMap
    而不是常规的
    HashMap
    ,这将显著影响性能。对于机器对机器的通信,顺序在大多数情况下并不相关。也有一些例外,比如流式解析器,它们可能是相关的,但这不是一个非常常见的用例。