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

2022-09-02 08:53:53

我试图使用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"
}

我的问题是,为什么它会改变属性的顺序。

我可以有我想要的顺序吗?


答案 1

在这里看到答案:JSON顺序混淆

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

http://www.json.org/ 的 JSON 规范中:

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

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


答案 2

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

但是,如果您确实希望有序项,则可以自己实现它,并使用LinkedHashMap作为类的项的容器。