杰克逊json到对象解析

时间:2016-07-28 09:17:57

标签: java json jackson

我有一个任务要将Json解析为Java Class。

Jason片段我试图解析并遇到问题就像树结构一样。

这里的关键点是parameterValue可能是字符串,或者是参数名称/值对的另一个数组;

我想使用Jackson mapper

Response response = mapper.readValue(jsonObjstring, Response.class);

这里的问题是我不知道如何在这里描述Response类,所以它可以由Jackson自动解析。如果可能的话。

JSON:

[{
  "parameterName" : "name",
  "parameterValue" : "value"
}, {
  "parameterName" : "apnRecord",
  "parameterValue" : [{
     "parameterName" : "name",
     "parameterValue" : "value"
  }, {
     "parameterName" : "name",
     "parameterValue" : "value"
  }, {
     "parameterName" : "name",
     "parameterValue" : "value"
  }, {
     "parameterName" : "name",
     "parameterValue" : "value"
  }, {
     "parameterName" : "name",
     "parameterValue" : "value"
  }, {
     "parameterName" : "name",
     "parameterValue" : "value"
  }]
}]

4 个答案:

答案 0 :(得分:2)

你可以试试这个在线json到java pojo mapper,它产生了所需的结果,它对我来说很方便。

http://pojo.sodhanalibrary.com/

尝试一下,如果你遇到任何困难,提供你收到的完整的json,我们可以解决其他问题。

答案 1 :(得分:1)

创建一个POJO Response.java类,其中包含您的字段,getter / setter,创建标准构造函数和包含字段的构造函数,以及toString方法()。我给你看一个Annotations的例子

定义类如:

@JsonAutoDetect
@JsonSerialize
public class Response implements Serializable

然后你的字段

@JsonProperty
private String parameterName;

最后你的构造函数f.e.像这样

@JsonCreator
public Response(@JsonProperty("parameterName") String parameterName) {
    this.parameterName = parameterName;
}

答案 2 :(得分:0)

我已将其定义为

private List<List<Object>> resultParameters;

然后jackson maper将它(Object)解析为LinkedHashMapEnty,当它是最终值时,或者解析为ArrayList - 如果它不是值而是另一个值List;

可以关闭;

答案 3 :(得分:0)

package test;

import java.io.IOException;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Test {

    public static void main(String[] args) {

        String readJsonAsString = "[{\r\n  \"parameterName\" : \"name\",\r\n  \"parameterValue\" : \"value\"\r\n}, {\r\n  \"parameterName\" : \"apnRecord\",\r\n  \"parameterValue\" : [{\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }, {\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }, {\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }, {\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }, {\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }, {\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }]\r\n}]";

        try {

            ObjectMapper mapper = new ObjectMapper();
            JsonNode jsonNodes = mapper.readTree(readJsonAsString.toString());
            for (JsonNode jsonNode : jsonNodes) {
                System.out.println(jsonNode.get("parameterName"));
            }


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

    }

}

首先需要将json转换为字符串格式,然后通过ObjectMapper将其转换为树结构。

为此您需要使用3个罐子: 杰克逊的注解 - 2.3.5.jar 杰克逊核心2.3.5.jar 杰克逊 - 数据绑定-2.3.5.jar