2011-11-15 89 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