小编典典

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

json

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

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

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

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

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


阅读 361

收藏
2020-07-27

共1个答案

小编典典

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

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

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

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

不幸的是,笨蛋在那里1谁忽略了规范的这一方面,并把属性的顺序上有一定意义。(通常,在指定API的人员与实现API的人员之间存在脱节,并且从事规范工作的人员并不真正理解JSON时,通常会犯此错误。)

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

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

带着困难,我担心:

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

1-例如,这个可怜的开发人员正在为…工作的机智…

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

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

2020-07-27