Java中如何将JSON读取到的各键值正确添加到ArrayList中
你遇到的类型转换错误本质是因为JSON中不同类型的值反序列化后对应不同的Java类型,包括嵌套对象对应LinkedHashMap、数组对应List、布尔值对应Boolean、数字对应Integer,无法直接强转为String。
你可以用Jackson自带的序列化方法把任意类型的值转为JSON格式字符串存入列表,修正后代码如下:
try { // create object mapper instance ObjectMapper mapper = new ObjectMapper(); // convert JSON file to map Map<?, ?> map = mapper.readValue(Paths.get("user.json").toFile(), Map.class); ArrayList<String> data = new ArrayList<>(); // 遍历所有键值对 for (Map.Entry<?, ?> entry : map.entrySet()) { Object value = entry.getValue(); // 将任意类型的value序列化为JSON字符串 String strValue = mapper.writeValueAsString(value); data.add(strValue); } } catch (Exception ex) { ex.printStackTrace(); }
转换后列表中各元素的结果:
meta字段对应的字符串为{"stock":"AWS","date modified":90}roles字段对应的字符串为["Member","Admin"]admin字段对应的字符串为true- 其余原生字符串类型的字段值保持不变
如果你不需要标准JSON格式的字符串,也可以用String.valueOf(value)代替mapper.writeValueAsString(value),直接获取值的普通字符串形式。如果不需要限制列表元素为String类型,也可以直接声明ArrayList<Object>直接存入原始值,后续使用时再做类型判断即可。
内容的提问来源于stack exchange,提问作者Wilhelmo Gutred
相关产品推荐
相关产品推荐

