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

Cha*_*aya 31 java json

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

JSONObject jObj = {"AAA:aaa","BBB:bbb","CCC:ccc"}
Run Code Online (Sandbox Code Playgroud)

我将此对象发送到服务器,在该服务器中,它期望JSON对象具有以下类型.

{"BBB:bbb", "AAA:aaa", "CCC:ccc"}
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*n C 50

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

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

"对象是一组无序的名称/值对." (来源json.org)

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

不幸的是,笨蛋在那里1谁忽略了规范的这一方面,并把属性的顺序上有一定意义.(通常在指定API的人与实现API的人之间断开连接时会出现错误,并且执行规范工作的人员并不真正理解JSON.)

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

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

有困难,我担心:

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

1 - 例如,这个可怜的开发人员正在努力的傻瓜...... /sf/answers/316110441/

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

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

  • 确实是“那里有机智的人”。我在这里查看的代码先解析.split(“,”)和substring()的JSON。 (2认同)

Sur*_*tta 12

恕我直言 不可能.

JSON文档

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

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