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

我有一个在我的 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?

我担心会遇到困难:

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

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/

相关文章:

json - 如何在 jq 中将 JSON 对象转换为 key=value 格式?

javascript - 属性名称的 JSON 语法

c# - 返回 JSON 对象 (ASP.NET WebAPI)

javascript - Rails 中奇怪的 JSON Javascript 问题

python - Pandas 数据框到没有索引的json

json - 从 react 组件进行 REST 调用

json - 如何在 Ubuntu 上看到一个漂亮的大型 JSON 文件?

python - 将 Json 嵌套到具有特定格式的 pandas DataFrame

javascript - 列表/数组是有效的 JSON 吗?

java - 使用 jackson JsonNodeFactory 的最佳方式