[alibaba/fastjson]解析后自动重新排序怎么办?

2025-11-25 114 views
7

解析后自动重新排序了,我只能换回Gson。

回答

3

show testcase plz

7

{“statecode”:"0","msg":"登录成功"} ,我用JSON.toJSONString上面的数据后就成了,{"msg":"登录成功","statecode":"0"} 字段的顺序按字母排序了,我要的是返回的原来的顺序。

1

这两个语义上是相等的, 能问一下你需要保序性的原因吗

7

JSON.parseObject("....", Feature.OrderedField); // 这个可以保持顺序

5
public static <T> String parseObjToJson(T object) {
    String string = null;
    try {
        string = JSON.toJSONString(object);
        //string = JSONObject.toJSONString(object);
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
    return string;
}

楼上说的是对象转json之后,转出来的属性乱序了,而不是 @wenshao 说的把Json转Java对象顺序没了。 这个怎么控制呢?

0

Json.toJsonString后和POJO字段顺序不一样,有好的解决办法吗

8

@wenshao

3

issues里好多类似的诉求呢

0

@wenshao 同样的诉求。。

7

这个对象转成json之后,属性顺序不变,这个需求,fastjson是可以做到的。 fastjson之@JSONField注解的几个的使用详细示范 这个注解里面的ordinal属性,可以控制转json字符串之后的各个属性的顺序。要是没设置的话,默认就是按照属性的首字母去排序了。 这个理论,在楼上的问题里面可以得到印证。 详情,可以参观一下,我分享的那个链接,亲自测试了。肯定可以解决问题。

2

SerializerFeature.MapSortField ,Feature.OrderedField统一配置 肯本不生效 FastJsonConfig config = new FastJsonConfig(); config.setFeatures( Feature.OrderedField ); config.setSerializerFeatures( SerializerFeature.MapSortField, //保留null的字段 SerializerFeature.WriteMapNullValue, //Date使用ISO8601格式输出 默认为false 不使用默认时间戳 SerializerFeature.UseISO8601DateFormat );