我有一个JSON对象,我在Java程序中构建了它。
JSONObject jObj = {"AAA:aaa","BBB:bbb","CCC:ccc"}
我将此对象发送到服务器,在该服务器中,它需要以下类型的JSON对象。
{"BBB:bbb", "AAA:aaa", "CCC:ccc"}
我的问题是JSON对象的顺序在服务器端真的很重要吗?如果是,我该如何更改订单?
答案 0 :(得分:37)
我的问题是JSON对象的顺序在服务器端真的很重要吗?
不应该重要。根据各种JSON规范,属性的顺序并不重要。例如:
“对象是一组无序的名称/值对。” (来源json.org)
“对象是零个或多个名称/值对的无序集合,其中名称是字符串,值是字符串,数字,布尔值,空值,对象或数组。” (来源RFC 7159)
不幸的是,那里有一些人, 1 忽略了规范的这一方面,并对属性的顺序赋予了一些重要性。 (通常在指定API的人与实现API的人之间断开连接时会出现错误,而执行规范工作的人员并不真正了解JSON。)
幸运的是,设计/实施服务器的人很可能没有犯这个错误。我遇到的大多数Java JSON解析器在解析时都不保留属性顺序...默认情况下 2 。很难意外地实现一个服务器,其中被解析的JSON属性的顺序很重要。
如果是,我该如何更改订单?
我很担心:
Map
对象。如果您使用LinkedHashMap
或TreeMap
,则应保留插入顺序或属性键的词法顺序。1 - 例如,这个可怜的开发人员正在为之工作的傻瓜...... https://stackoverflow.com/a/4515863/139985
2 - RFC 7159也说:“观察到JSON解析库是否会使对象成员的排序对调用软件可见。其行为不依赖于的实现成员排序将是可互操作的,因为它们不会受到这些差异的影响。“。通过我的阅读,这建议JSON库应该隐藏应用程序代码中任何对的顺序。
3 - JSON-simple:https://code.google.com/p/json-simple/。也可能有其他人。
答案 1 :(得分:11)
答案 2 :(得分:1)
您可以使用列表,假设您的服务器可以接受它:
{"list": [ {"AAA":"aaa"},{"BBB":"bbb"},{"CCC":"ccc"}]}
答案 3 :(得分:-3)
JSON对象中的字段顺序实际上很重要。这取决于您使用的序列化程序。例如,当序列化继承的对象时,您将获得一个名为type =''的额外JSON字段。反序列化时,类型字段必须位于任何其他JSON字段之前,否则它将采用父类型。