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(对象和数组)。

  1. 对象:

      An object is an `unordered collection` of zero or more name/value 

    对,其中名称是string,值是string,数字,布尔值,空值,对象或数组。

  2. 数组:

    数组是一个有零个或多个值的ordered sequence

术语“对象”和“数组”来自JavaScript的惯例。 所以它是一个无序的对象实现。 有关JSON的更多信息,请参阅下面链接中的RFC-4627!

http://www.ietf.org/rfc/rfc4627.txt

谢谢

那个JSONObject实际上是一个键值映射表。 它没有内在的秩序。 如果你想要的东西有序,你可能想看看JSONArray(但不会有键 – >值,只是值)。

正如其他人所说,JSONObject不应该保持相同的顺序。

但是,如果您希望订购物品,则可以自己实施,并使用LinkedHashMap作为您class级的物品容器。