java - Json 到 Java 对象的转换 - 在 Jackson 中失败
问题描述
我正在尝试使用 Java 中的 jackson 解析以下对象。
[
[null, {
"distance": 2272,
"duration": 580
}, {
"distance": 7217,
"duration": 1393
}, {
"distance": 5773,
"duration": 1061
}, {
"distance": 6208,
"duration": 1170
}, {
"distance": 18846,
"duration": 2686
}],
[{
"distance": 2262,
"duration": 558
}, null, {
"distance": 7144,
"duration": 1366
}, {
"distance": 4803,
"duration": 801
}, {
"distance": 5238,
"duration": 910
}, {
"distance": 17876,
"duration": 2426
}],
[{
"distance": 7207,
"duration": 1393
}, {
"distance": 7505,
"duration": 1411
}, null, {
"distance": 12375,
"duration": 2010
}, {
"distance": 12809,
"duration": 2119
}, {
"distance": 24868,
"duration": 3462
}],
[{
"distance": 7481,
"duration": 1255
}, {
"distance": 4643,
"duration": 831
}, {
"distance": 11497,
"duration": 2060
}, null, {
"distance": 434,
"duration": 109
}, {
"distance": 13197,
"duration": 1657
}],
[{
"distance": 7723,
"duration": 1326
}, {
"distance": 4884,
"duration": 902
}, {
"distance": 11739,
"duration": 2130
}, {
"distance": 434,
"duration": 107
}, null, {
"distance": 12999,
"duration": 1628
}],
[{
"distance": 20372,
"duration": 2918
}, {
"distance": 17534,
"duration": 2493
}, {
"distance": 25912,
"duration": 3432
}, {
"distance": 13669,
"duration": 1774
}, {
"distance": 13414,
"duration": 1779
}, null]
]
我是否收到以下错误。
线程“主”java.lang.IllegalArgumentException 中的异常:无法构造实例
com.beeline.DistanceMatrix
"duration":1774},{"distance":13414,"duration":1779},null]]') 在 [来源:未知;行:-1,列:-1] 在 com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:3750) 在 com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:3668) 在 com .beeline.JsonParser.(JsonParser.java:17)
我正在使用的课程是
JsonParser.java
public class JsonParser {
private DistanceMatrix matrix = new DistanceMatrix();
public JsonParser() {
String jsonString = "[[null,{\"distance\":2272,\"duration\":580},{\"distance\":7217,\"duration\":1393},{\"distance\":5773,\"duration\":1061},{\"distance\":6208,\"duration\":1170},{\"distance\":18846,\"duration\":2686}],[{\"distance\":2262,\"duration\":558},null,{\"distance\":7144,\"duration\":1366},{\"distance\":4803,\"duration\":801},{\"distance\":5238,\"duration\":910},{\"distance\":17876,\"duration\":2426}],[{\"distance\":7207,\"duration\":1393},{\"distance\":7505,\"duration\":1411},null,{\"distance\":12375,\"duration\":2010},{\"distance\":12809,\"duration\":2119},{\"distance\":24868,\"duration\":3462}],[{\"distance\":7481,\"duration\":1255},{\"distance\":4643,\"duration\":831},{\"distance\":11497,\"duration\":2060},null,{\"distance\":434,\"duration\":109},{\"distance\":13197,\"duration\":1657}],[{\"distance\":7723,\"duration\":1326},{\"distance\":4884,\"duration\":902},{\"distance\":11739,\"duration\":2130},{\"distance\":434,\"duration\":107},null,{\"distance\":12999,\"duration\":1628}],[{\"distance\":20372,\"duration\":2918},{\"distance\":17534,\"duration\":2493},{\"distance\":25912,\"duration\":3432},{\"distance\":13669,\"duration\":1774},{\"distance\":13414,\"duration\":1779},null]]";
ObjectMapper oMapper = new ObjectMapper();
oMapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
oMapper.enable(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT);
matrix = oMapper.convertValue(jsonString, DistanceMatrix.class);
System.out.print(matrix);
}
}
距离矩阵.java
public class DistanceMatrix {
public ArrayList<ArrayList<Map<String, Float>>> matrix = new ArrayList<ArrayList<Map<String, Float>>>();
}
我在 GitHub 和 SO 上看到了多个类似的问题。但我不知道为什么它不起作用。关于出了什么问题的任何指示?
解决方案
您的DistanceMatrix
类描述了一个 JSON 对象,该对象具有一个名为的键matrix
和一个对应的 type 值ArrayList<ArrayList<Map<String, Float>>>
。
您需要将 JSON 包装成看起来像{ "matrix": <your actual JSON> }
或直接指定类型convertValue
。
推荐阅读
- frontend - 如何在 Svelte 中设置元素内容的样式?
- c# - 资源 (resx) 文件始终返回英文(默认)字符串
- python - 将列从对象转换为浮点的问题
- r - R-plotly中带有堆积面积图的叠加线
- eclipse - Eclipse 标记出现 Scala 根本不起作用
- javascript - Sequelize 事务回滚到特定的保存点
- apache-spark - Spark DataFrame - 如何将单列转换为多行
- tensorflow - 在 argmax 上使用 collect 与使用 max 不同
- node.js - 使用 _rooms 向套接字所在的每个房间发射
- javascript - 在自定义控件 UI5 中绑定 Multicombobox 的 selectedItems