将JsonString的列表转换为User对象的列表

17 浏览
0 Comments

将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"}]

0
0 Comments

问题的原因是在使用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 '}'"。经过分析,发现问题可能是输入列表包含带有双引号的字符串。

根据以上分析,我们可以得出结论,导致问题的原因是输入列表中的字符串带有双引号,解决方法是去除字符串中的双引号或者对输入进行合理的处理。

0