将JsonString的列表转换为User对象的列表
将JsonString的列表转换为User对象的列表
不是How to use Jackson to deserialise an array of objects的重复。
在列表中,项目是用双引号括起来的字符串。
我试图将一组作为json字符串的消息转换为UserDefined对象的列表。
我有如下输入。
[
"{\"id\":\"5\",\"type\":\"abc\",\"innerObject\":{\"id\":\"8\"}}"
]
请问如何将此列表转换为MyClass的列表。
class MyClass{ String id; String type; Inner inner; //getters and setters } class Inner{ String id; //getters and setters }
我尝试了以下方法:
objectMapper.readValue(jsonFormattedString, new TypeReference>(){});
还有这个:
Type listType = new TypeToken>() {}.getType(); myList = new Gson().fromJson(jsonFormattedString, listType);
但是都不起作用。
期望的输出是:
[{"id":"5","type":"abc","innerObject":"8"}]
问题的原因是在使用ObjectMapper的readValue方法时,第二个参数应该是一个类(class),而不是一个类的实例。针对单个项,可以直接传入类名作为参数调用readValue方法。针对泛型列表,有多种解决方法。可以使用TypeReference来构造列表类型,也可以使用getTypeFactory方法来构造列表类型。另外,也可以使用基本的数组类型作为参数。
解决方法如下:
1. 对于使用TypeReference的方式:
objectMapper.readValue(jsonFormattedString, new TypeReference>(){});
2. 对于使用getTypeFactory的方式:
objectMapper.readValue(jsonFormattedString, objectMapper.getTypeFactory().constructCollectionType(List.class, TransEvent.class));
3. 对于使用数组类型的方式:
TransEvent[] transEvents = objectMapper.readValue(jsonFormattedString, TransEvent[].class);
然而,在尝试使用第二种方式时,出现了com.fasterxml.jackson.core.JsonParseException异常,错误信息为"Unexpected close marker ']': expected '}'"。经过分析,发现问题可能是输入列表包含带有双引号的字符串。
根据以上分析,我们可以得出结论,导致问题的原因是输入列表中的字符串带有双引号,解决方法是去除字符串中的双引号或者对输入进行合理的处理。