值的顺序在 JSON 对象中是否重要?

2022-08-31 23:59:14

我有一个JSON对象,我已经在我的Java程序中构建了它。

JSONObject jObj = {"AAA:aaa","BBB:bbb","CCC:ccc"}

我正在将此对象发送到服务器,其中它期望以下类型的JSON对象。

{"BBB:bbb", "AAA:aaa", "CCC:ccc"}

我的问题是,JSON对象的顺序在服务器端真的重要吗?如果是,我该如何更改订单?


答案 1

我的问题是,JSON对象的顺序在服务器端真的重要吗?

这应该无关紧要。根据各种 JSON 规范,属性的顺序并不重要。例如:

“对象是一组无序的名称/值对。(来源 json.org)

“对象是零个或多个名称/值对的无序集合,其中名称是字符串,值是字符串,数字,布尔值,null,对象或数组。(来源 RFC 7159)

不幸的是,有1个尼特维特忽略了规范的这一方面,并对属性的顺序给予了一些意义。(当指定API的人和实现API的人之间出现脱节,并且做规范工作的人并不真正理解JSON时,通常会犯错误。

幸运的是,设计/实现服务器的人很可能没有犯这个错误。我遇到的大多数Java JSON解析器在解析时都不会保留属性顺序...默认情况下2.很难意外地实现一个服务器,其中被解析的JSON属性的顺序很重要。

如果是,我该如何更改订单?

困难重重,我担心:

  • 您可以手动生成 JSON。
  • Java 实现3 至少有一个 JSON 允许您提供保存 JSON 对象属性的对象。如果使用 或 ,则应保留属性键的广告顺序或词法顺序。MapLinkedHashMapTreeMap

1 - 例如,这个可怜的开发人员正在为之工作的尼特威特人...https://stackoverflow.com/a/4515863/139985

2 - RFC 7159也说:“JSON解析库在是否使对象成员的排序对调用软件可见方面存在差异。其行为不依赖于成员排序的实现将是可互操作的,因为它们不会受到这些差异的影响。根据我的阅读,这建议JSON库应该从应用程序代码中隐藏对的任何顺序。

3 - JSON-simple : https://code.google.com/p/json-simple/.可能还有其他人。


答案 2

恕我直言,不可能

JSON文档

对象是一组无序的名称/值对

因此,方法是按所需的顺序获取值,而不是排序json