Java List<JSONObject>如何转换为List<实体类>
作者:CnLg.NJ
这篇文章主要介绍了Java List<JSONObject>如何转换为List<实体类>的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
List<JSONObject>转换为List<实体类>
可以使用 Fastjson 的 toJavaObject 方法直接转换,无需中间序列化步骤。
以下是具体实现和注意事项:
import com.alibaba.fastjson.JSONObject;
import java.util.List;
import java.util.stream.Collectors;
public class Converter {
public static List<Params6000Bean> convert(List<JSONObject> jsonObjectList) {
return jsonObjectList.stream()
.map(json -> json.toJavaObject(Params6000Bean.class))
.collect(Collectors.toList());
}
}或通过传统循环实现:
import com.alibaba.fastjson.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class Converter {
public static List<Params6000Bean> convert(List<JSONObject> jsonObjectList) {
List<Params6000Bean> result = new ArrayList<>();
for (JSONObject json : jsonObjectList) {
Params6000Bean bean = json.toJavaObject(Params6000Bean.class);
result.add(bean);
}
return result;
}
}关键步骤说明
1)遍历 List<JSONObject>
使用 Stream API 或循环逐个处理每个 JSONObject。
2)调用 toJavaObject() 方法
Fastjson 的 JSONObject.toJavaObject(Class<T> clazz) 直接将 JSON 数据结构映射到目标 Bean 类。
3)收集结果
将转换后的 Params6000Bean 对象收集到新的 List 中。
注意事项
字段匹配
Params6000Bean的字段名需与 JSON 中的键名一致。- 若字段名不一致,可使用
@JSONField(name = "json_key")注解:
public class Params6000Bean {
@JSONField(name = "user_name")
private String userName;
// 其他字段和 getter/setter
}类型兼容性
- JSON 中的值类型需与 Bean 字段类型兼容(如
String转Integer会失败)。 - 若类型不一致,需自定义反序列化逻辑或使用 Fastjson 的
@JSONField(deserializeUsing = CustomDeserializer.class)。
空值处理
- 若 JSON 中某字段为
null,Bean 的对应字段需允许null(如使用包装类型Integer而非int)。
性能优化
- 直接使用
toJavaObject()避免序列化为字符串,效率更高。 - 对于大数据量,推荐使用 Stream API 或并行流(需确保线程安全)。
示例 Bean 类
public class Params6000Bean {
private String name;
private int age;
private boolean isStudent;
// 必须有 getter/setter 或 public 字段
}异常处理
如果 JSON 数据可能存在缺失字段或类型错误,建议捕获异常:
try {
List<Params6000Bean> beans = convert(jsonObjectList);
} catch (Exception e) {
// 处理转换异常(如字段缺失、类型不匹配)
e.printStackTrace();
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
