2011-03-30 143 views
6

反序列化JSON之后我有以下的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; 
} 

使用杰克逊的Json解串器。这不起作用,因为body字段嵌套在fields内部类中。

我不能改变JSON结构,所以有什么办法(可能使用注释)我可以重映射body字段从​​到TestItem.body

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

+0

如何使用流式API读取相同内容? – emaillenin 2013-08-10 13:32:20

回答

5

有几个功能请求(如果实现的话)将允许有限的一级打包/解包。但目前没有声明的方式来做到这一点。在某种程度上,这是一种边缘情况,因为这涉及到数据转换,而不是数据绑定(不幸的是,我不能想到好的对象转换库,所以可能有一点差距)。 (通常是java.util.Map或jackson JsonNode(Tree模型));第一步是创建一个中间类型(通常是java.util.Map或者JsonNode(Tree model));然后,修改这些,然后从此类型转换为实际结果。例如,如下所示:

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