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

新手上路,请多包涵

我有一个在我的 Java 程序中构建的 JSON 对象。

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

我将此对象发送到服务器,它需要以下类型的 JSON 对象。

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

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

原文由 Chanaka udaya 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 923
2 个回答

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

没关系。根据各种 JSON 规范,属性的顺序并不重要。例如:

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

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

不幸的是,有些傻子1忽略了规范的这一方面,并且对属性的顺序赋予了一定的意义。 (当指定 API 的人和实现 API 的人之间存在脱节,并且从事规范工作的人并不真正理解 JSON 时,通常会犯此错误。)

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

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

艰难地,我担心:

  • 您可以手动生成 JSON。
  • Java 实现3至少有一个 JSON,它允许您提供 Map 对象,该对象包含 JSON 对象的属性。如果您使用 LinkedHashMapTreeMap ,它应该保留属性键的插入顺序或词法顺序。

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

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

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

原文由 Stephen C 发布,翻译遵循 CC BY-SA 4.0 许可协议

恕我直言 不可能

JSON 文档

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

所以方法是按要求的顺序获取值,而不是排序 json

原文由 Suresh Atta 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题