java - 如何使用 Jackson 反序列化以下 json

标签 java json jackson

我有以下 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 结构,所以有什么方法(可能使用注释)可以从 TestItem.fields.body 重新映射 body 字段到 TestItem.body?

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

最佳答案

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

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

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

关于java - 如何使用 Jackson 反序列化以下 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5485116/

相关文章:

java - Java 中的 "Invalid declaration method"

java - 客户端退出聊天程序时无限打印"null"

java - 解析包含 Long 值的 JSON 字符串时出现 NumberFormatException

java - 包括给定包外部的类的反射(Dropwizard + Swagger)

javascript - AJAX 如果 JSON-response = X -> 执行操作

php - JSON 单项

jackson - 从 ArrayNode 创建 Java 8 流

javascript - 在java中读取javascript对象

java - Jackson:反序列化列表时捕获单个项目的异常

java - Hibernate 仅将新记录插入数据库