fastjson的toJSONString方法如何保持原数据的顺序性

已知一个LinkedHashMap:

Map<String, Object> report = halfYearDataService.getHalfYearReport(writerData.getCompanyCode(), writerData.getYear());

使用fastjson中的

String jsonString = JSONObject.toJSONString(report);

使用gson中的

Gson gson = new Gson();
String reportString = gson.toJson(report);

结果gson的是按照原来顺序的json字符串,而fastjson中顺序就乱了

log.info("reportString: {}", reportString);

gson截图如下:
report是map数据,reportString是转成json字符串的结果,可见gson是保持顺序的。如何使用fastjson保持顺序?

img

用fastjson的SerializerFeature.OrderedField特性去保证顺序性

哪个版本fastjson~

img

【以下回答由 GPT 生成】

Fastjson是一个轻量级的JSON库,它在序列化过程中默认会对字段进行排序,所以导致了你看到的原始顺序被打乱的问题。如果你想要保持原来的顺序,可以使用fastjson的SerializerFeature.PrettyFormat属性来解决。这个属性会在序列化过程中保留字段的原始顺序。以下是具体的代码解决方案:

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;

// ...

Map<String, Object> report = halfYearDataService.getHalfYearReport(writerData.getCompanyCode(), writerData.getYear());

// 设置PrettyFormat属性
String jsonString = JSONObject.toJSONString(report, SerializerFeature.PrettyFormat);

// 输出json字符串
System.out.println(jsonString);

这样,你就能够使用fastjson的toJSONString方法来保持原数据的顺序性了。

请记住,在使用fastjson库时,需要确保正确引入fastjson的相关依赖。

如果你有任何其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^