Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jackson无法将JSON映射到包含映射的对象_Java_Json_Serialization_Jackson_Linkedhashmap - Fatal编程技术网

Java Jackson无法将JSON映射到包含映射的对象

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

我有一个Java POJO,如下所示:

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映射到Java
map
,而不是包含Java
map
的对象(
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                         ║
╚══════════════════════╩══════════════════════════════╝