我有这样一个结构:
{
"name": "user",
"values":[["0.00207760","18.48000000"],["0.00207740","40.00000000"],["0.00207710","2.26000000"]]
}
我想使用流行的Jackson库反序列化为这样的类:
public class Values {
public String name;
public Map<BigDecimal, BigDecimal> values = new HashMap<>();
}
其中values
属性中的每个条目都成为类Map中的键/值条目。
但是,如果我尝试对Jackson进行简单的反序列化,则会出现以下错误:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.TreeMap<java.lang.Object,java.lang.Object>` out of START_ARRAY token
at [Source: (String)"{"name": "user","values":[["0.00207760","18.48000000"],["0.00207740","40.00000000"],["0.00207710","2.26000000"]]...
at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)
at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1442)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1216)
...
如何使用Jackson实现这一点
谢谢你!
爱德华多
2条答案
按热度按时间vlju58qv1#
您期望
Map
,它在JSON
端由JSON Object
表示,但存在一个JSON Array
,它可以默认Map到List
、Set
或array
。我建议在POJO
中使用List<List<BigDecimal>>
,并创建一个将数据转换为Map
的方法:以上代码打印:
在其他情况下,您需要为
Map
实现一个custom
反序列化程序,并使用@JsonDeserialize注解为此字段注册它。wrrgggsh2#
List在内部数组中使用相同的数据类型,但是我得到了一个Map,它被转换成了一个嵌套的jsonArray,值是一个jsonObject。
https://riptutorial.com/java/example/18575/deserialize-json-collection-to-collection-of-objects-using-jackson给了我答案。
JSON格式:
3班答:
第二类:
然后又恢复正常的庄生:
仍然需要一个方法来将列表转换回Map,但它非常接近,并且内部数据被解析/反序列化。