使用Jackson开始在嵌套JSON对象中进行解析

时间:2019-01-09 13:58:32

标签: java json jackson

我具有以下JSON结构:

{
  "uri": {
    "{{firstname}}": "Peter",
    "{{lastname}}": "Griffin",
    "{{age}}": 42
  }
}

我想将其反序列化到我的Bean中:

public class Uri {

    private String firstname;
    private String lastname;
    private int age;

    /* getter and setter */
}

但是出现以下错误:

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "uri" (class com.abc.Uri), not marked as ignorable (3 known properties: "firstname", "lastname", "age")

所以我想,我需要将属性uri放入。

有什么方法可以直接在uri属性中开始解析吗?

更新

这就是我读取JSON的方式:

ObjectMapper mapper = new ObjectMapper();
uri = mapper.readValue(new URL("test2.json"), Uri.class);

2 个答案:

答案 0 :(得分:1)

您的JSON格式应为:

{
  "uri": {
    "firstname": "Peter",
    "lastname": "Griffin",
    "age": 42,
  }
}

答案 1 :(得分:1)

您的方法将不起作用,因为您试图一次获取整个json对象,而没有首先获得一个特定的节点。

与其使用mapper构造函数加载json,而是以其他方式获取json。我会使用URLHTTPURLConnection从网络上获取json字符串。

拥有json字符串后,请使用以下命令:

 ObjectMapper objectMapper = new ObjectMapper();
 JsonNode rootNode = objectMapper.readTree(json);

获取uri表示的json节点,如下所示:

JsonNode uriNode = rootNode.get("uri");

然后仅发送要解析的节点,如下所示:

杰克逊2.4

Uri uri = objectMapper.treeToValue(uriNode, Uri.class);

杰克逊2.4之前的

Uri uri = objectMapper.readValue(uriNode, Uri.class);