Java List<JSONObject>如何轉(zhuǎn)換為List<實(shí)體類>
List<JSONObject>轉(zhuǎn)換為List<實(shí)體類>
可以使用 Fastjson 的 toJavaObject 方法直接轉(zhuǎn)換,無需中間序列化步驟。
以下是具體實(shí)現(xiàn)和注意事項(xiàng):
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());
}
}或通過傳統(tǒng)循環(huán)實(shí)現(xiàn):
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;
}
}關(guān)鍵步驟說明
1)遍歷 List<JSONObject>
使用 Stream API 或循環(huán)逐個(gè)處理每個(gè) JSONObject。
2)調(diào)用 toJavaObject() 方法
Fastjson 的 JSONObject.toJavaObject(Class<T> clazz) 直接將 JSON 數(shù)據(jù)結(jié)構(gòu)映射到目標(biāo) Bean 類。
3)收集結(jié)果
將轉(zhuǎn)換后的 Params6000Bean 對(duì)象收集到新的 List 中。
注意事項(xiàng)
字段匹配
Params6000Bean的字段名需與 JSON 中的鍵名一致。- 若字段名不一致,可使用
@JSONField(name = "json_key")注解:
public class Params6000Bean {
@JSONField(name = "user_name")
private String userName;
// 其他字段和 getter/setter
}類型兼容性
- JSON 中的值類型需與 Bean 字段類型兼容(如
String轉(zhuǎn)Integer會(huì)失?。?。 - 若類型不一致,需自定義反序列化邏輯或使用 Fastjson 的
@JSONField(deserializeUsing = CustomDeserializer.class)。
空值處理
- 若 JSON 中某字段為
null,Bean 的對(duì)應(yīng)字段需允許null(如使用包裝類型Integer而非int)。
性能優(yōu)化
- 直接使用
toJavaObject()避免序列化為字符串,效率更高。 - 對(duì)于大數(shù)據(jù)量,推薦使用 Stream API 或并行流(需確保線程安全)。
示例 Bean 類
public class Params6000Bean {
private String name;
private int age;
private boolean isStudent;
// 必須有 getter/setter 或 public 字段
}異常處理
如果 JSON 數(shù)據(jù)可能存在缺失字段或類型錯(cuò)誤,建議捕獲異常:
try {
List<Params6000Bean> beans = convert(jsonObjectList);
} catch (Exception e) {
// 處理轉(zhuǎn)換異常(如字段缺失、類型不匹配)
e.printStackTrace();
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java僅用30行代碼就實(shí)現(xiàn)了視頻轉(zhuǎn)音頻的批量轉(zhuǎn)換
這篇文章主要介紹了java僅用30行代碼就實(shí)現(xiàn)了視頻轉(zhuǎn)音頻的批量轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
在啟動(dòng)后臺(tái) jar包時(shí),使用指定的 application.yml操作
這篇文章主要介紹了在啟動(dòng)后臺(tái) jar包時(shí),使用指定的 application.yml操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10
jdbc連SQL?server顯示1433端口連接失敗圖文解決方法
這篇文章主要給大家介紹了關(guān)于jdbc連SQL?server顯示1433端口連接失敗的圖文解決方法,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-06-06
Java基于面向?qū)ο髮?shí)現(xiàn)一個(gè)戰(zhàn)士小游戲
這篇文章主要為大家詳細(xì)介紹了Java如何基于面向?qū)ο髮?shí)現(xiàn)一個(gè)戰(zhàn)士小游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下2022-07-07

