如何用Gson将JS字符串化值转换为Java中的List?
问题分析与解决
你的输入字符串"[\"value0\"]"本质是一个包含JSON数组的字符串(外层被双引号包裹,内部才是真正的数组结构),直接用Gson解析成List<String>会失败——因为Gson会把整个输入识别为字符串类型,而非数组类型,这就是报错Expected BEGIN_ARRAY but was STRING的核心原因。
解决思路与实现
方式一:先解析为字符串再转数组(推荐)
利用Gson自动处理转义的特性,先把整个输入解析成字符串(得到内部的纯JSON数组字符串),再将其解析为List<String>,无需手动处理转义或截取:
import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.util.ArrayList; public class Demo { public static void main(String[] args) { String stringifiedList = "\"[\\\"value0\\\"]\""; // 你的原始输入 Gson gson = new Gson(); // 第一步:解析得到内部的JSON数组字符串 String innerArrayStr = gson.fromJson(stringifiedList, String.class); // 第二步:将数组字符串解析为List<String> ArrayList<String> values = gson.fromJson(innerArrayStr, new TypeToken<ArrayList<String>>(){}.getType()); // 验证结果 System.out.println(values); // 输出: [value0] } }
方式二:手动处理字符串后解析
如果需要手动处理输入字符串,可先去除外层双引号,再替换内部的转义字符,得到纯JSON数组后再解析:
import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.util.ArrayList; public class Demo { public static void main(String[] args) { String stringifiedList = "\"[\\\"value0\\\"]\""; // 去除首尾双引号,替换转义的双引号 String pureJsonArray = stringifiedList.substring(1, stringifiedList.length() - 1) .replace("\\\"", "\""); Gson gson = new Gson(); ArrayList<String> values = gson.fromJson(pureJsonArray, new TypeToken<ArrayList<String>>(){}.getType()); System.out.println(values); // 输出: [value0] } }
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

