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】:对于ObjectMapper
的readValue
方法,第二个参数应该是类而不是类实例。例如,如果这是单个项目,您可以调用 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 列表到用户对象列表的转换 [重复]的主要内容,如果未能解决你的问题,请参考以下文章