【发布时间】:2022-01-12 09:18:20
【问题描述】:
我有一个 JSON 文件:
{
"param": {
"rows": 1,
"columns": "4"
},
"items": [{
"name": "A",
"amount": 33,
"price": "43"
}, {
"name": "B",
"amount": 43,
"price": "2"
}, {
"name": "C",
"amount": 45,
"price": "1"
}, {
"name": "D",
"amount": 543,
"price": "55"
}]
}
我想单独获取这些物品。我尝试做,结果做了null:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Items item; // only items
item = objectMapper.readValue(new File("D:/example/file.json"), Items.class);
System.out.println(item.getAmount());
这是 Items 的类:
public class Items {
private String name;
private String amount;
private double price;
public Items() {
super();
}
//constructor
//getters and setters
}
我做错了什么?如何正确读取项目的值?
【问题讨论】:
-
您应该将类
Items重命名为Item并创建另一个具有成员变量List<Item> items的类(如Items)。 -
不明白
-
换句话说,当您进行转换时,杰克逊希望将 JSON 中的字段放入一个对象中,该对象具有名为
param的对象以及具有name的对象列表、amount和price字段。因此建议让 ab 对象Item保存它,然后将它作为列表包含在主对象中 -
您试图解析包含
param对象和items数组的顶级元素到不正确的Items类中,items数组包含一个项目数组。所以@LHCHIN 建议您创建另一个包含List<Item> items的类,然后将其作为类而不是item传递给readValue方法 -
您正在尝试将集合
{Items1, Items2, Items3}映射到名为Items的类,该类不是集合,但仅包含字符串和双字段。
标签: java json jackson-databind