如何在Jackson JSON解析器

时间:2015-12-23 01:57:24

标签: java arrays json spring

我有一个api,它会吐出以下JSON:

{
    "monitors": [
        [
            "/Common/http-cc-ping-any"
        ]
    ],
    "is_alive":true
}

我正在尝试使用spring和Jackson JSON Parser将JSON映射到POJO

POJO定义为:

public class MonitorsList {

    @JsonProperty("monitors")
    private List<Monitors> monitors;

    public void setMonitors(List<Monitors> monitors) {
        this.monitors = monitors;
    }

    public List<Monitors> getMonitors() {
        return this.monitors;
    }

    private boolean is_alive;

    public void setIsAlive(boolean is_alive) {
        this.is_alive= is_alive;
    }

    public boolean getIsAlive() {
        return this.is_alive;
    }
}

我的Monitor POJO是:

@JsonAutoDetect
public class Monitors {
     private ArrayList<String> monitors;

     public ArrayList<String> getMonitors() {
            return this.monitors;
        }

        public void setMonitors(ArrayList<String> monitors) {
            this.monitors = monitors;
        }
}

我正在使用RestTemplate来检索JSON数据,但是我收到以下错误:

  

错误:无法读取文档:无法从START_ARRAY标记中反序列化hello.Monitors的实例    在[来源:java.io.PushbackInputStream@2a2c13a8; line:1,column:14](通过引用链:hello.MonitorsList [“monitors”] - &gt; java.util.ArrayList [0]);嵌套异常是com.fasterxml.jackson.databind.JsonMappingException:无法从START_ARRAY令牌中反序列化hello.Monitors的实例    在[来源:java.io.PushbackInputStream@2a2c13a8; line:1,column:14](通过引用链:hello.MonitorsList [“monitors”] - &gt; java.util.ArrayList [0])

我似乎无法弄清楚我做错了什么。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

感谢@SotiriosDelimanolis并稍微阅读,我能够弄清楚我做错了什么。

所以,JacksonJSON Parser映射了

{
    "monitors": [
        [
            "/Common/http-cc-ping-any"
        ]
    ],
    "is_alive":true
}

如以下POJO:

public class MonitorsList {

    @JsonProperty("monitors")
    private List<Monitors> monitors;

    public void setMonitors(List<Monitors> monitors) {
        this.monitors = monitors;
    }

    public List<Monitors> getMonitors() {
        return this.monitors;
    }

    @JsonProperty("is_alive")
    private boolean is_alive;

    public void setIsAlive(boolean is_alive) {
        this.is_alive= is_alive;
    }

    public boolean getIsAlive() {
        return this.is_alive;
    }
}

监控POJO:

@JsonAutoDetect
public class Monitors extends ArrayList<String> {
}

注意 ,即is_alive未映射到setIsAlive,因此将注释@JsonProperty("is_alive")提供给字段is_alive或方法setIsAlive将起作用!