[alibaba/fastjson]json字符串转换成json对象后key的顺序不一致问题

2024-09-20 852 views
3

fastjson版本:1.2.76

{
    "a": {
        "a": 1,
        "ab": 1,
        "aa": 1
    },
    "ab": {
        "a": "1"
    },
    "aa": {
        "a": "1"
    }
}

将如上的json字符串通过JSONObject.parse()转换为json对象后,该对象中的顺序会改变为下方的顺序。我不清楚这是一种特定自动排序机制吗?但似乎看起来没有什么规律。不知道这是否属于一种bug,还是因为我使用不当。按理说反序列不是应该完全保持原样吗?

{
    "aa": {
        "a": "1"
    },
    "a": {
        "aa": 1,
        "a": 1,
        "ab": 1
    },
    "ab": {
        "a": "1"
    }
}

回答

7

也许在大多数场景下使用json是不关心其key的顺序的,但是我的程序中正好对其顺序有一定的要求碰巧发现了这个问题。不知道我想的对不对,我感觉反序列化的过程应该保持一致状态

8

跟issue #2966 类似 我写了如下代码,转换正常,应该没问题,可以close @zhilaohu32

@Test
public void test1() throws JsonProcessingException {
String a = "{" +
        "\"a\": {" +
        "\"a\": 1," +
        "\"ab\": 1," +
        "\"aa\": 1" +
        "}," +
        "\"ab\": {" +
        "\"a\": \"1\"" +
        "}," +
        "\"aa\": {" +
        "\"a\": \"1\"" +
        "}" +
        "}";
JSONObject jsonObject = JSON.parseObject(a, Feature.OrderedField);
Assert.assertEquals("{\"a\":{\"a\":1,\"ab\":1,\"aa\":1},\"ab\":{\"a\":\"1\"},\"aa\":{\"a\":\"1\"}}",JSON.toJSONString(jsonObject));
}
8

@lethal233 好的,果然是我的姿势不正确。谢谢你的回答