如何将JSON格式字符串转换为JSONArray并转为List集合?
解决JSON数组字符串转List的问题
看起来你在把JSON数组字符串转换成Java List集合的时候踩了个小坑,咱们一步步来修正你的代码:
先说说你现有代码的核心问题
- 你错误地把
JsonObject强制转换成JSONArray,这两个类没有继承关系,运行时肯定会抛出ClassCastException - 你完全没用到目标JSON字符串
toConvert,而是新建了一个空的JsonObject,这根本没法解析你要处理的内容
方案1:使用原生org.json库(适合基础场景)
如果用的是Java自带的org.json库,正确的做法是直接用JSON字符串初始化JSONArray,然后遍历每个元素,手动映射到你的myClass对象:
import org.json.JSONArray; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; public void RestoreData() { String toConvert = "[{...}]"; // 你的标准JSON数组字符串 List<myClass> listdata = new ArrayList<>(); try { // 直接用JSON字符串初始化JSONArray,这才是正确的解析方式 JSONArray jArray = new JSONArray(toConvert); for (int i = 0; i < jArray.length(); i++) { JSONObject jsonObj = jArray.getJSONObject(i); // 把JSONObject的字段映射到myClass对象,这里需要你根据myClass的属性来写 myClass item = new myClass(); item.setId(jsonObj.getInt("id")); // 示例:假设myClass有id字段 item.setName(jsonObj.getString("name")); // 示例:假设myClass有name字段 // 其他属性依次映射... listdata.add(item); } } catch (Exception e) { // 捕获JSON解析异常,避免程序崩溃 e.printStackTrace(); } // 现在listdata里就是你要的集合了 }
方案2:用Gson库(更简洁,自动映射)
如果想更省心,避免手动字段映射,可以用Google的Gson库,它能直接把JSON数组字符串转换成List
首先确保你的myClass类的字段名和JSON里的键名一致(或者用@SerializedName注解指定对应关系),然后代码可以简化成:
import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.util.List; public void RestoreData() { String toConvert = "[{...}]"; // 你的标准JSON数组字符串 Gson gson = new Gson(); // 用TypeToken来指定泛型类型,避免类型擦除问题 List<myClass> listdata = gson.fromJson(toConvert, new TypeToken<List<myClass>>(){}.getType()); // 直接得到转换后的List,无需手动遍历 }
小提示
- 如果用Jackson库,思路和Gson类似,也是通过ObjectMapper来实现自动转换
- 无论用哪种方式,都要确保你的
myClass有对应的无参构造方法,否则解析库可能无法实例化对象
内容的提问来源于stack exchange,提问作者Hubizonek
相关产品推荐
相关产品推荐

