18

我试图使用 JSON 对象构造一个 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

3 回答 3

40

在此处查看答案:JSON 顺序混淆

您不能也不应该依赖 JSON 对象中元素的顺序。

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

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

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

于 2013-06-21T07:02:55.190 回答
4

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

但是,如果您确实希望订购物品,您可以自己实现它,并使用LinkedHashMap作为您的类的物品容器。

于 2013-06-21T07:12:05.490 回答
2

JSONObject 实际上是键到值的映射。它没有内在的秩序。如果您想要订购的东西,您可能需要查看 JSONArray (但它没有键 -> 值,只有值)。

于 2013-06-21T07:03:18.937 回答