Java Jackson无法将JSON映射到包含映射的对象
我有一个Java POJO,如下所示:Java Jackson无法将JSON映射到包含映射的对象,java,json,serialization,jackson,linkedhashmap,Java,Json,Serialization,Jackson,Linkedhashmap,我有一个Java POJO,如下所示: public class Widget { private Map<String,Object> params; // Getter, setter, ctor, etc... } 目前我传递的JSON是: { "params": [{ "acks": "all" }, { "retries": 0 }, { "batch.size": 16384
public class Widget {
private Map<String,Object> params;
// Getter, setter, ctor, etc...
}
目前我传递的JSON是:
{
"params": [{
"acks": "all"
}, {
"retries": 0
}, {
"batch.size": 16384
}, {
"linger.ms": 1
}, {
"buffer.memory": 33554432
}, {
"key.serializer": "org.apache.kafka.common.serialization.StringSerializer"
}, {
"value.serializer": "org.apache.kafka.common.serialization.StringSerializer"
}]
}
运行此操作时,我会遇到以下异常:
com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance
of java.util.LinkedHashMap out of START_ARRAY token
我看到了一个非常类似的问题,除了使用Jackson将JSON映射到Javamap
,而不是包含Javamap
的对象(Widget
)之外
我曾经验证过JSON是否有效因此我需要更改JSON或代码,或者可能同时更改两者。有什么想法吗?JSON是有效的,但不适用于地图。
params
的值是一个数组,它应该是如下所示的对象:
{
"params": {
"acks": "all",
"retries": 0,
"batch.size": 16384,
"linger.ms": 1,
"buffer.memory": 33554432,
"key.serializer": "org.apache.kafka.common.serialization.StringSerializer",
"value.serializer": "org.apache.kafka.common.serialization.StringSerializer"
}
}
在中,您可以找到以下关系:
Jackson将用于简单数据绑定的具体Java类型有:
╔══════════════════════╦══════════════════════════════╗
║ JSON Type ║ Java Type ║
╠══════════════════════╬══════════════════════════════╣
║ object ║ LinkedHashMap<String,Object> ║
║ array ║ ArrayList<Object> ║
║ string ║ String ║
║ number (no fraction) ║ Integer, Long or BigInteger ║
║ number (fraction) ║ Double (or BigDecimal) ║
║ true|false ║ Boolean ║
║ null ║ null ║
╚══════════════════════╩══════════════════════════════╝
╔══════════════════════╦══════════════════════════════╗
║ JSON类型║ Java类型║
╠══════════════════════╬══════════════════════════════╣
║ 对象║ LinkedHashMap║
║ 排列║ ArrayList║
║ 一串║ 一串║
║ 数字(无分数)║ 整数、长整数或大整数║
║ 数字(分数)║ 双精度(或双精度)║
║ 对|错║ 布尔值║
║ 无效的║ 无效的║
╚══════════════════════╩══════════════════════════════╝
一个列表
应该可以做到:
公共类小部件{
私有列表参数;
//接球手和接球手
}
╔══════════════════════╦══════════════════════════════╗
║ JSON Type ║ Java Type ║
╠══════════════════════╬══════════════════════════════╣
║ object ║ LinkedHashMap<String,Object> ║
║ array ║ ArrayList<Object> ║
║ string ║ String ║
║ number (no fraction) ║ Integer, Long or BigInteger ║
║ number (fraction) ║ Double (or BigDecimal) ║
║ true|false ║ Boolean ║
║ null ║ null ║
╚══════════════════════╩══════════════════════════════╝