当前位置: 首页 > 知识库问答 >
问题:

JSONObject:为什么JSONObject改变属性的顺序[重复]

况谦
2023-03-14

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

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

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

共有3个答案

夔建章
2023-03-14

该 JSON 对象实际上是键到值的映射。它没有内在的秩序。如果你想要订购一些东西,你可能想看看JSONArray(但那不会有钥匙 -

南宫俊喆
2023-03-14

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

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

杨飞飙
2023-03-14

看到这里的答案:JSON顺序混了

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

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

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

因此,JSON 库可以自由地重新排列元素的顺序,只要它们认为合适。这不是一个错误。

 类似资料:
  • 问题内容: 我会通过大包装喜欢迭代与GSON。我的最终目标是获取内部对象中所有现有的三位数整数,但是一旦我可以遍历外部对象的属性,就没有问题。 有什么整洁的方法吗? 问题答案: 您可以用来遍历最外层的成员。

  • 问题内容: 我正在使用JSONObject来删除JSON字符串中不需要的certin属性: 它可以正常工作,但是问题是JSONObject是“名称/值对的无序集合”,我想保持String在通过JSONObject操作之前的原始顺序。 任何想法如何做到这一点? 问题答案: 你不能 这就是为什么我们称其 为名称/值对的无序集合 。 我不确定为什么需要这样做。但是,如果要订购,则必须使用json数组。

  • 我有以下JSONObject: 我对使用JSON非常陌生。我需要的是JSON对象数组,每个键都是Question5、Question4等,这些值就是答案。你能帮忙吗?

  • 我想向jsonObject添加一个新字段,这个新字段的名称将基于另一个字段的值。明确地说,这是我想要实现的一个例子。 我想为每个json对象添加一个新的字段,它将以字段“stat”的值作为名称。 我尝试使用JsonPath库执行以下操作,但对我来说,这是一个难看的解决方案,因为我将解析json三次,并进行一些手动替换。 这是得到的结果 有没有更好的方法来达到这个结果呢?我试着用gson来做,但它不

  • 在使用一个库的时候碰到了一个很奇怪的问题,有个class实例化生成的对象,假设为A 对A的属性进行修改 打印A发现,其中的a属性并没有变,但是直接打印A.a是改变了的,请问这种情况大概会是什么原因呢,是有什么知识盲区吗,目前知道a属性是不可删除的属性,但是一般对象设置configurable=false也不会出现这种情况,如果不允许修改的话应该也会报错。。 (PS:A只是为了表述简化的例子,并不是

  • 我有一个json blob,如下所示: 这只是一个在这里发布的例子。在这个例子中,我们看到它提供了一个学校每年发生的所有事件的列表,该列表是一个累积列表,即上一年的事件也会被追加。我们知道的是,每年的活动都将以“会议开始”活动开始。我想通过这件事,以最新的一系列事件结束。请忽略事件名称中的时间戳或年份,它们只是示例,我在现实世界中没有此类信息。我需要的最终结果是: 所以,我想保留从“会话开始”事件