JSON字符串转换成对象保证顺序一致性问题

业务场景:对前端传过的json字符串进行转换处理,但是在转换为对象时突然发现发生了乱序,不是进来的时候的顺序了,需要进行更正,保持顺序一致不变。

元数据json字符串是这样的:

"

{
    "38b3794634c143ff88aa533ead0ec0b7":"good",
    "2f0811da29c54b41988d6e5d173db3d4":"fair",
    "5b16c7633c5f47e3bec17d64b2d2f7af":"fair",
    "e11296e23ac54e48b1f8f879687b190d":"fair",
    "14f3886902204720b758f774365e6043":"fair",
    "93ba82a3e44f4904aee164e777b1a0f9":"fair",
    "b56ed838bf62490399f9beef5895801e":"fair",
    "7f9bd8dee225444198dfba8e4414b4f0":"fair",
    "fff63e3f7e5a462d9f64bd1f9cf71460":"fair",
    "34002853f0224774884f2ae98e3f0c1a":"fair"

"

但是 Map<String,Object> algoMap = JSON.parseObject(algoJsonStr[0])转换后变成了

{
    "b56ed838bf62490399f9beef5895801e":"fair",
    "7f9bd8dee225444198dfba8e4414b4f0":"fair",
    "38b3794634c143ff88aa533ead0ec0b7":"good",
    "2f0811da29c54b41988d6e5d173db3d4":"fair",
    "5b16c7633c5f47e3bec17d64b2d2f7af":"fair",
    "e11296e23ac54e48b1f8f879687b190d":"fair",
    "14f3886902204720b758f774365e6043":"fair",
    "93ba82a3e44f4904aee164e777b1a0f9":"fair",
    "fff63e3f7e5a462d9f64bd1f9cf71460":"fair",
    "34002853f0224774884f2ae98e3f0c1a":"fair"
}

如果对顺序没有特殊要求,其实是没事儿的,但是业务必须要知道good的index位置,因此就提出了对json转换,不能改变顺序的要求。

解决方法:

<fastjson.version>1.2.9</fastjson.version>

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>${fastjson.version}</version>
</dependency>

fastjson版本必须支持,刚开始用的是1.1.40版本不支持Feature特性

然后对刚开始的代码换成

Map<String,Object> algoMap = JSON.parseObject(algoJsonStr[0],LinkedHashMap.class, Feature.OrderedField);

转换后的效果

{
    "38b3794634c143ff88aa533ead0ec0b7":"good",
    "2f0811da29c54b41988d6e5d173db3d4":"fair",
    "5b16c7633c5f47e3bec17d64b2d2f7af":"fair",
    "e11296e23ac54e48b1f8f879687b190d":"fair",
    "14f3886902204720b758f774365e6043":"fair",
    "93ba82a3e44f4904aee164e777b1a0f9":"fair",
    "fff63e3f7e5a462d9f64bd1f9cf71460":"fair",
    "34002853f0224774884f2ae98e3f0c1a":"fair"
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力终会有回报

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值