【问题标题】:How to deserialize the following json using Jackson如何使用 Jackson 反序列化以下 json
【发布时间】:2011-03-30 10:28:08
【问题描述】:

我有以下 json:

{
  "id":"myid",
  "fields":{
    "body":"text body"
    }
}

我想将其反序列化为以下 Java 类:

class TestItem {
private String id;
private String body;

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getBody() {
    return body;
}

public void setBody(String body) {
    this.body = body;
}

使用 Jackson Json 反序列化器。这不起作用,因为body 字段嵌套在fields 内部类中。

我无法更改 json 结构,所以有什么方法(可能使用注释)我可以将 body 字段从 TestItem.fields.body 重新映射到 TestItem.body

编辑: 我应该说这是更大的类层次结构的一部分,练习的目的是减少它的深度。换句话说,我知道我可以声明一个内部类然后访问它,但这不是我想要实现的。

【问题讨论】:

  • 如何使用流式 API 读取相同的内容?

标签: java json jackson


【解决方案1】:

有几个功能请求(如果实施)将允许有限的一级包装/展开。但目前没有声明性的方式来做到这一点。在某种程度上,这是边缘情况,因为这涉及数据转换而不是数据绑定(不幸的是,我想不出好的对象转换库,所以那里可能存在一些差距)。

那么,通常要做的就是做两阶段绑定:首先进入中间类型(通常是java.util.Map,或者jackson JsonNode(树模型));修改这些,然后从这种类型转换为实际结果。例如这样的:

JsonNode root = mapper.readTree(jsonSource);
// modify it appropriately (add, remove, move nodes)
MyBean bean = mapper.convertValue(root, MyBean.class);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 2019-06-23
    相关资源
    最近更新 更多