fastjson转换对象为json字符串时,对象内Map元素乱序问题

经常会使用fastjson的JSON.parseObject(); 将java对象序列化和反序列化。

如果代码中使用到了JSON.parseObject();这个方法反序列化了controller返回的对象,那么返回给前端的数据有一定概率会导致对象内Map对象元素或者List对象元素顺序乱序。


举个栗子:

@GetMapping(path = "/testJsonOrder")
public Result<Map<String, Object>> testJsonOrder() {
    Result<Map<String, Object>> result = Result.createSuccessResult();
    Map<String, Object> fieldMap = Maps.newLinkedHashMap();
    fieldMap.put("key1", "value1");
    fieldMap.put("key4", "value4");
    fieldMap.put("key2", "value2");
    fieldMap.put("key3", "value3");
    fieldMap.put("key5", "value5");
    Map<String, Object> res = new HashMap<>();
    res.put("fieldMap", fieldMap);
    result.value(res);
    String s = JSON.toJSONString(result);
    Result result1 = JSON.parseObject(s, Result.class);
    return result1;
}

debug调试截图:
在这里插入图片描述
可以发现。反序列化后fieldMap元素乱序了。


如果发现乱序问题,可以用下面思路解决:
1、JSON.parseObject();方法传递Feature参数,比如:

Result result1 = JSON.parseObject(s, Result.class, Feature.OrderedField);

可以发现,顺序不乱了。
在这里插入图片描述
2、也可使用SpringBoot内置的jackson ObjectMapper 进行序列化和反序列化操作。


建议:由于alibaba.fastjson没人维护以及各种漏洞问题,不建议使用。建议直接使用内置 jackson ObjectMapper。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值