我有一个在我的 Java 程序中构建的 JSON 对象。
JSONObject jObj = {"AAA:aaa","BBB:bbb","CCC:ccc"}
我将此对象发送到服务器,它需要以下类型的 JSON 对象。
{"BBB:bbb", "AAA:aaa", "CCC:ccc"}
我的问题是 JSON 对象的顺序在服务器端真的很重要吗?如果是,我该如何更改订单?
最佳答案
My question is that does the order of the JSON object really matters on the server side?
它不应该重要。根据各种 JSON 规范,属性的顺序并不重要。例如:
"An object is an unordered set of name/value pairs." (Source json.org)
"An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array." (Source RFC 7159)
不幸的是,有些傻瓜1忽略了规范的这一方面,并在属性的顺序上赋予了一些意义。 (错误通常是在指定 API 的人员与实现 API 的人员之间存在脱节,而从事规范工作的人员并不真正了解 JSON 时。)
幸运的是,设计/实现服务器的人很有可能没有犯这个错误。我遇到的大多数 Java JSON 解析器在解析时都不会保留属性顺序……默认情况下2。很难意外实现一个解析 JSON 属性的顺序很重要的服务器。
If yes, how can i change the order?
我担心会遇到困难:
Map
对象。如果使用 LinkedHashMap
或 TreeMap
,则应保留属性键的插入顺序或词法顺序。1 - 例如,这个可怜的开发人员为之工作的傻瓜... https://stackoverflow.com/a/4515863/139985
2 - RFC 7159 也这样说:“JSON 解析库在它们是否使调用软件可见对象成员的顺序方面存在差异。其行为不依赖于成员排序将是可互操作的,因为它们不会受到这些差异的影响。"。根据我的阅读,这建议 JSON 库应该从应用程序代码中隐藏任何对的顺序。
3 - JSON 简单:https://code.google.com/p/json-simple/ .可能还有其他人。
https://stackoverflow.com/questions/16870416/