在使用 fastjson 将对象序列化成字符串时,发现字段顺序乱了,百度搜了一下,发现原因是将字符串反序列化(即转成JSON对象)时,被默认规则处理了。如果不想使用默认规则,就需要我们指定需要的规则,这里我们可以使用 Feature.OrderedField 来使其保持原有字段顺序。例如:

System.out.println(jsonString);
// 默认
JSONObject jsonObject = JSON.parseObject(jsonString);
// 修改后
JSONObject jsonObject = JSON.parseObject(jsonString, Feature.OrderedField);
String string= JSON.toJSONString(jsonObject);
System.out.println(string);

我直接去看了下 JSON.parseObject 方法,我猜测字段顺序不一致就是被默认的这个规则影响的:Feature.SortFeidFastMatch ,字面意思就是 以最快速度为字段进行排序

在这里插入图片描述
即:

System.out.println(jsonString);
// 默认
JSONObject jsonObject = JSON.parseObject(jsonString);
// 即上面默认处理 相当于 
JSONObject jsonObject = JSON.parseObject(jsonString, Feature.SortFeidFastMatch);

(本来想深究一下的,没想到 Feature 是个枚举类型对象 ,而 getMask() 方法只会返回一个 int 值,然后走不通了,就先这样吧 😂 )

GitHub 加速计划 / fastj / fastjson
3
1
下载
FASTJSON 2.0.x has been released, faster and more secure, recommend you upgrade.
最近提交(Master分支:10 个月前 )
c942c834 - 2 年前
5bc4709b - 2 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐