JsonString 列表到用户对象列表的转换 [重复]

Posted

技术标签:

【中文标题】JsonString 列表到用户对象列表的转换 [重复]【英文标题】:List of JsonString to list of User Objects conversion [duplicate] 【发布时间】:2020-02-06 02:20:07 【问题描述】:

不是How to use Jackson to deserialise an array of objects的副本。

在列表中,项目是双引号内的字符串。

我正在尝试将 jsonString 的消息列表转换为 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<List<MyClass>>());

还有这个

Type listType = new TypeToken<ArrayList<MyClass>>() .getType();
myList = new Gson().fromJson(jsonFormattedString, listType);

但不工作。

预期输出是

["id":"5","type":"abc","innerObject":"8"]

【问题讨论】:

你试过 Gson 了吗? 是的。我试过这个。更新查询。 你能用getter和setter更新完整的类吗 jsonString里面有innerObject,但是MyClass里面的属性叫做inner而不是innerObject。难道是它不起作用的问题吗? 但错误甚至在此之前,因为输入列表包含带双引号的字符串。 【参考方案1】:

对于ObjectMapperreadValue 方法,第二个参数应该是类而不是类实例。例如,如果这是单个项目,您可以调用 readValue,如下所示:

objectMapper.readValue(jsonFormattedString, TransEvent.class);

对于通用列表,这可以通过以下任一方式完成:

// list
objectMapper.readValue(jsonFormattedString, new TypeReference<List<TransEvent>>());

// list
objectMapper.readValue(jsonFormattedString, objectMapper.getTypeFactory().constructCollectionType(List.class, TransEvent.class));

// array
TransEvent[] transEvents = objectMapper.readValue(jsonFormattedString, TransEvent[].class);

【讨论】:

是的。如果对象是单个项目。但它是列表和字符串项目。 @user3763375 我忘记了泛型的类型擦除,我已经更新了我的回复 @user3763375 其实你也可以使用基本数组类型,我刚才添加了使用TransEvent[].class的例子 com.fasterxml.jackson.core.JsonParseException: Unexpected close marker ']': expected '' (当我尝试 objectMapper.readValue(jsonFormattedString, objectMapper.getTypeFactory) 时,从 [Source: ] 开始().constructCollectionType(List.class, TransEvent.class)); 我认为问题是输入列表包含带双引号的字符串。

以上是关于JsonString 列表到用户对象列表的转换 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

添加到自定义类中的列表,然后将其转换为 json String

Scala - 将地图列表转换为地图

复杂的 html 表单到 json 对象

使用 Dozer 的自定义转换器将对象列表映射到另一个列表

将对象转换为对象列表 Javascript

Drools将一个对象的列表转换为drools中的另一个对象的列表