使用Jackson Framework将JSON转换为Java对象

时间:2015-03-30 14:34:06

标签: json jackson

我是杰克逊框架的新手并且在某些方面陷入困境。我正在尝试将JSON消息转换为Java对象,但是我遇到了错误。你能否告诉你解决这个问题的行动方案。

错误:

org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "coord"

代码

@Test
    public void jsonToJava(){

        String responseString = "{  \n" +
                "   \"coord\":{  \n" +
                "      \"lon\":21.01,\n" +
                "      \"lat\":52.23\n" +
                "   }\n" +
                "}";

        ObjectMapper mapper = new ObjectMapper();

        try {
            Coord cor = mapper.readValue(responseString, Coord.class);
            System.out.println(cor);

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

GetterAndSetter类:

public class Coord {

    private Double lon;
    private Double lat;

    public Double getLon() {
        return this.lon;
    }

    public void setLon(Double lon) {
        this.lon = lon;
    }

    public Double getLat() {
        return this.lat;
    }

    public void setLat(Double lon) {
        this.lat = lat;
    }

}

2 个答案:

答案 0 :(得分:0)

这对你班级的json字符串是正确的

String responseString = "{\"lon\":21.01,\"lat\":52.23}";

还请更正您的setLon方法,替换为以下

public void setLat(Double lat) {
    this.lat = lat;
}

答案 1 :(得分:0)

你可以通过多种方式实现这一目标,这里有两种方法。

首先,您可以告诉ObjectMapper解包根值:

mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);

并将您的Coord课程更改为以下内容:

@JsonRootName("coord")
public class Coord {

    private Double lon;
    private Double lat;

    // getters and setters

}

要使用@JsonRootName,您需要jackson-annotations。如果你正在使用maven,只需添加:

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-annotations</artifactId>
  <version>2.5.3</version>
</dependency>

如果您使用的是gradle,请添加:

compile 'com.fasterxml.jackson.core:jackson-annotations:2.5.3'

或从wikihere

下载

第二种方式,将您的JSON更改为:

{
  "lon":21.01,
  "lat":52.23
}