不足:为null的字段默认都转成了空字符串""。像有些需求要求字段是数值类型(一般默认值0),没有实现。
依赖:
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.23</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.3</version>
</dependency>
工具类:
package com.ce.module.hppes.scrap.util;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import java.util.ArrayList;
import java.util.List;
/**
* JSONObject中的null转成空字符串
*/
public class JsonNullToEmptyString {
public static JSONObject convertNullsToEmptyStrings(JSONObject jsonObject) {
// 创建一个新的JSONObject来存储处理后的结果
JSONObject result = new JSONObject();
// 遍历原始JSONObject的每个键值对
for (String key : jsonObject.keySet()) {
Object value = jsonObject.get(key);
// 检查值是否为null
if (value == null) {
// 如果是null,则替换为空字符串
result.put(key, "");
} else if (value instanceof JSONObject) {
// 如果值是另一个JSONObject,则递归处理
result.put(key, convertNullsToEmptyStrings((JSONObject) value));
} else if (value instanceof JSONArray) {
// 如果值是JSONArray,则递归处理数组中的每个元素(这里假设数组元素是JSONObject或其他可递归的类型)
// 注意:这里的处理逻辑可以根据实际需求进行调整,比如仅处理数组中的JSONObject元素
JSONArray array = new JSONArray();
for (int i = 0; i < ((JSONArray) value).size(); i++) {
Object arrayElement = ((JSONArray) value).get(i);
if (arrayElement instanceof JSONObject) {
array.add(convertNullsToEmptyStrings((JSONObject) arrayElement));
} else {
array.add(arrayElement); // 非JSONObject元素保持不变
}
}
result.put(key, array);
} else if (value instanceof List) { //如果Object中的某个属性是List类型,转成JSONObject后,该属性仍然是List类型而不是JSONArray
ObjectMapper mapper = new ObjectMapper();
// 配置对象映射器以包含null字段
mapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, true);
try {
String json = mapper.writeValueAsString(value);
JSONArray array = new JSONArray(); //临时array
JSONArray jsonArray = JSONArray.parseArray(json);
for (Object arrayElement : jsonArray) {
if (arrayElement instanceof JSONObject) {
array.add(JsonNullToEmptyString.convertNullsToEmptyStrings((JSONObject) arrayElement));
}else {
array.add(arrayElement); // 非JSONObject元素保持不变
}
}
result.put(key, array);
}catch (JsonProcessingException e){
e.printStackTrace();
}
}
else {
// 其他类型的值保持不变
result.put(key, value);
}
}
return result;
}
}