JSONObject:为什么JSONObject改变属性的顺序
我正在尝试使用JSON对象构造一个JSONstring
我想要这样构buildJSONstring
{ "Level": "3", "Name": "testLogger", "IPADDRESS": "testMachiene", "Message": "hiiiiiiiiii", "TimeStamp": "test12345678" }
这是我的简单程序
package com; import org.json.JSONObject; public class Teste { public static void main(String args[]) throws Exception { int loglevel = 3; String loggerName = "testLogger"; String machieneName = "testMachiene"; String timeStamp = "test12345678"; String message = "hiiiiiiiiii"; JSONObject obj = new JSONObject(); obj.put("TimeStamp", message); obj.put("Message", timeStamp); obj.put("IPADDRESS", machieneName); obj.put("Name", loggerName); obj.put("Level", loglevel); System.out.println(obj.toString()); } }
它正在这样构build
{ "Name": "testLogger", "TimeStamp": "hiiiiiiiiii", "Message": "test12345678", "Level": 3, "IPADDRESS": "testMachiene" }
我的问题是,为什么它改变属性的顺序
我可以得到我希望的顺序吗?
在这里看到答案: JSON顺序混合起来
你不能也不应该依赖于JSON对象中元素的sorting。
从http://www.json.org/的JSON规范:;
“一个对象是一组无名称/值对”
因此,JSON库可以自由地重新排列元素的顺序,因为他们认为合适。 这不是一个错误。
Json包含两个结构化types(对象和数组)。
-
对象:
An object is an `unordered collection` of zero or more name/value
对,其中名称是string,值是string,数字,布尔值,空值,对象或数组。
-
数组:
数组是一个有零个或多个值的
ordered sequence
。
术语“对象”和“数组”来自JavaScript的惯例。 所以它是一个无序的对象实现。 有关JSON的更多信息,请参阅下面链接中的RFC-4627!
http://www.ietf.org/rfc/rfc4627.txt
谢谢
那个JSONObject实际上是一个键值映射表。 它没有内在的秩序。 如果你想要的东西有序,你可能想看看JSONArray(但不会有键 – >值,只是值)。
正如其他人所说,JSONObject不应该保持相同的顺序。
但是,如果您希望订购物品,则可以自己实施,并使用LinkedHashMap作为您class级的物品容器。