我有一个在我的 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 许可协议
我有一个在我的 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 许可协议
恕我直言 不可能。
JSON 文档 说
对象是一组无序的名称/值对
所以方法是按要求的顺序获取值,而不是排序 json
原文由 Suresh Atta 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.2k 阅读
8 回答6k 阅读
1 回答6k 阅读✓ 已解决
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
没关系。根据各种 JSON 规范,属性的顺序并不重要。例如:
不幸的是,有些傻子1忽略了规范的这一方面,并且对属性的顺序赋予了一定的意义。 (当指定 API 的人和实现 API 的人之间存在脱节,并且从事规范工作的人并不真正理解 JSON 时,通常会犯此错误。)
幸运的是,设计/实现服务器的人很可能没有犯那个错误。我遇到的大多数 Java JSON 解析器在解析时不保留属性顺序 … 默认情况下2 。很难 意外地 实现一个服务器,其中解析的 JSON 属性的顺序很重要。
艰难地,我担心:
Map
对象,该对象包含 JSON 对象的属性。如果您使用LinkedHashMap
或TreeMap
,它应该保留属性键的插入顺序或词法顺序。1 - 例如,这个可怜的开发人员正在为之工作的傻瓜…… https://stackoverflow.com/a/4515863/139985
2 - RFC 7159 也这样说:“JSON 解析库已经被观察到在它们是否使对象成员的排序对调用软件可见方面存在差异。 行为不依赖于成员排序的实现在某种意义上是可互操作的他们不会受到这些差异的影响。 ”。根据我的阅读,这建议 JSON 库 应该 从应用程序代码中隐藏对的任何顺序。
3 - JSON 简单: https ://code.google.com/p/json-simple/。也可能有其他人。