2011-11-15 43 views
12

我有一个这样的模式:杰克逊反序列化的变量作为JSON字符串

private String message; 
private Integer errorCode;  
private String data; 

我从远程和消息JSON字符串,变量的errorCode得到正确的值。但是我不想反序列化到我的数据变量。我想这是一个JSON字符串像:

{"cat": "1.2.3.4", "ner": "80", "name": "pinta" } 

之后,我会反序列化到对象自己。我怎样才能做到这一点?

PS:要澄清一个问题:

我得到一个JSON字符串这样的:

{ “数据”:{ “猫”: “1.2.3.4”, “净入学率”:“80 ”, “名”: “平塔”}, “消息”: “M”, “错误码”:12}

反序列化后,我的变量应该有一个值:

message => "m" 
errorCode => 12 
data => "{"cat": "1.2.3.4", "ner": "80", "name": "pinta" }" 
+0

你能否让它更清楚? – MByD

+0

@MByD当我在反序列化后调试我的变量时,我希望看到我的数据变量具有该值:'{“cat”:“1.2.3.4”,“ner”:“80”,“name”:“pinta”} '因为我是这样发送的:''data“:{”cat“:”1.2.3.4“,”ner“:”80“,”name“:”pinta“}' – kamaci

+0

@MByD我编辑了我的问题。 – kamaci

回答

7

我宁愿建议你让数据绑定到中间对象;通常这是java.util.Maporg.codehaus.jackson.JsonNode(JSON树)。然后您可以以任何您想要的方式访问数据;包括使用ObjectMapper.convertValue(inputPojo, outputType)轻松转换为POJO)。

+0

感谢您的回答并投票。只是想说清楚:我使用'myObject = mapper.readValue(data,clz);''transferredObject = mapper.convertValue(data,clz);''有什么区别? – kamaci

+0

readValue()解析来自给定源的内容,而convertValue()等效于写入值,将其读回给定类型 - 它可以将任何可以序列化为JSON的内容转换为可以从JSON中绑定的任何内容。 – StaxMan

+0

+1此问题的最佳答案。将类型保持为JsonNode使其能够调用toString()并获取String json值。 当然它首先被反序列化,然后再序列化,这是一个有点浪费,但到目前为止,这是唯一可以做的是好的,希望对成功和错误的对象上失败 – Rasive