JSONObject:为什么JSONObject改变属性的顺序

时间:2013-06-21 06:59:13

标签: java json

我试图使用JSON Object

构造一个JSON字符串

我希望以这种方式构造JSON字符串

{
    "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());

    }

}

它正在构建这种方式

{
    "Name": "testLogger",
    "TimeStamp": "hiiiiiiiiii",
    "Message": "test12345678",
    "Level": 3,
    "IPADDRESS": "testMachiene"
}

我的问题是为什么它改变了属性的顺序

我可以订购我想要的订单吗?

4 个答案:

答案 0 :(得分:29)

请在此处查看答案:JSON order mixed up

  

你不能也不应该依赖于一个元素的排序   JSON对象。

     

来自http://www.json.org/的JSON规范:

     

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

     

因此,JSON库可以根据需要自由重新排列元素的顺序。这不是一个错误。

答案 1 :(得分:11)

Json包含两种结构化类型(对象和数组)。

  1. 物件:

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

    对,其中名称是字符串,值是字符串,数字,    boolean,null,object或array。

  2. 数组:

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

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

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

    由于

答案 2 :(得分:2)

JSONObject实际上是值键的映射。它没有固有的顺序。如果你想要订购的东西,你可能想要查看JSONArray(但是它没有键 - >值,只是值)。

答案 3 :(得分:1)

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

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