【问题标题】:List of JsonString to list of User Objects conversion [duplicate]JsonString 列表到用户对象列表的转换 [重复]
【发布时间】: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。难道是它不起作用的问题吗?
  • 但错误甚至在此之前,因为输入列表包含带双引号的字符串。

标签: java json


【解决方案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));
  • 我认为问题是输入列表包含带双引号的字符串。
猜你喜欢
  • 1970-01-01
  • 2018-04-01
  • 2020-04-28
  • 2017-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
  • 1970-01-01
相关资源
最近更新 更多