Java 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") 注解:

    java

    复制

    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();
}

猜你喜欢

转载自blog.csdn.net/a876106354/article/details/147061623
今日推荐