开发者社区> 问答> 正文

fastjson 2 中map结构默认根据key排序

map结构默认根据key排序

问题描述

map结构默认根据key排序

版本信息

[e.g.:Fastjson2 2.0.21]

Map<String,String> map = new HashMap<>(); map.put("2","2"); map.put("1","1"); System.out.println(JSON.toJSONString(map));

实际输出结果

{"1":"1","2":"2"}

期待的正确结果

{"2":"2","1":"1"}

原提问者GitHub用户HuShao96

展开
收起
后端老大 2023-04-21 10:56:49 244 0
2 条回答
写回答
取消 提交回答
  • 和fastjson 1.x一样,加上 Feature.MapSortField就是你期待的结果,如下:

        Map<String,String> map = new HashMap<>();
        map.put("2","2");
        map.put("1","1");
        assertEquals(
                "{\"1\":\"1\",\"2\":\"2\"}",
                JSON.toJSONString(map, JSONWriter.Feature.MapSortField)
        );
    

    原回答者GitHub用户wenshao

    2023-04-21 14:01:23
    赞同 展开评论 打赏
  • 随心分享,欢迎友善交流讨论:)

    在 Fastjson 2.x 中,默认情况下,Map 类型对象的输出顺序是根据 key 的自然排序(即按照 key 值的字典序排序)来决定的。因此,如果要保证 Map 输出顺序的稳定性,可以使用 TreeMap 对象或者 LinkedHashMap 对象来代替 HashMap 对象。这两个类可以通过传入 Comparator 对象或者插入顺序来决定输出顺序。

    如果想要使用 HashMap 对象并且保证输出顺序固定,可以使用 SerializerFeature.MapSortField 特性来控制输出顺序。例如:

    Map<String,String> map = new HashMap<>(); map.put("2","2"); map.put("1","1"); System.out.println(JSON.toJSONString(map, SerializerFeature.MapSortField)); 在上面的代码中,我们使用了 SerializerFeature.MapSortField 特性来控制输出顺序。输出结果为:

    {"1":"1","2":"2"} 需要注意的是,使用 SerializerFeature.MapSortField 特性可能会影响序列化的性能,因此建议在必要时使用。

    2023-04-21 11:12:01
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载