2016-05-17 69 views
-2

我如何轉換的JSON字符串是這樣的:轉換的LinkedHashMap <字符串,MyClass的>到Java對象

{ "summary": { 
    "totalMR":4.599000000000903E12, 
    "totalMA":1.9174920000386694E11, 
    "totalQA":5.1111111181E9, 
    "totalQR":1.000020666115264E11 
    }, 
    "result": [{},{}], 
    "success":"true", 
    "total":49 
} 

Java對象。我經歷了許多類似的帖子並實現了構造函數,但找不到解釋爲什麼我無法反序列化JSON的正確解釋。

我做錯了什麼?

我的班級:

public class expResponse { 
private String success; 
private String total; 
private ArrayList<LinkedHashMap<String,Object>> result; 
private LinkedHashMap<String,SummaryResponse> summary; 
// Constructor: public expResponse(){} 
// Getter and Setter 
} 

public class SummaryResponse { 
private Float totalQR; 
private Float totalQA; 
private Float totalMR; 
private Float totalMA; 

public SummaryResponse(){} 
// Setter and Getter 
} 

我的代碼:

private expResponse processResult(String result) throws IOException{ 
ObjectMapper objectMapper = new ObjectMapper(); 
expResponse expResponseObj = 
objectMapper.readValue(result, expResponse.class); 
return expResponseObj; 
+0

您正在使用哪個JSON庫? – Nayuki

+0

@Nayuki Jackson – Jammy

+0

你是什麼意思「無法反序列化JSON」?你是否遇到異常?缺失數據?你的電腦是否冒出藍煙? – dimo414

回答

2

您發佈的json不會反序列化爲SummaryResponse對象的映射,而是個別的SummaryResponse對象。爲了讓你的綁定工作,你就必須有JSON看起來是這樣的:

{ 
... 
    'summary': { 
    'summary1': {"totalMR":4.599000000000903E12,"totalMA":1.9174920000386694E11,"totalQA":5.1111111181E9,"totalQR":1.000020666115264E11} 
    'summary2': {"totalMR":4.599000000000903E12,"totalMA":1.9174920000386694E11,"totalQA":5.1111111181E9,"totalQR":1.000020666115264E11} 
    } 
... 
} 

另外,如果你需要使你的Java類符合您所提供的JSON,你只需要改變的聲明總結:

private SummaryResponse summary; 
+0

感謝它的工作! – Jammy

0

難道不能deserialised的SummaryResponse?

我想你的屬性應該有相同的名字「totalMR」,「totalMA」....或者你應該使用註釋JsonProperty(value =「totalMR」)等等。

+0

這個答案不正確。他的字段名稱與他提供的json文檔中的字段名稱匹配。 – rmlan

+0

在兩分鐘前編輯的文檔:) –

+0

已編輯進行格式設置。內容沒有改變。 – rmlan

1

json中的字段摘要是SummaryResponse類型的對象,而不是LinkedHashMap類型的對象。

public class ExpResponse { 
    private String success; 
    private String total; 
    private ArrayList<LinkedHashMap<String,Object>> result; 
    private Summary summary; 
} 
1

我不認爲你在代碼中有問題。您的輸入失敗,因爲它的格式不正確。如果您嘗試從字符串的值相同的對象寫相同的值,你喜歡的東西:

{ 
    "success":"true", 
    "total":"49", 
    "result":null, 
    "summary":{ 
     "one_summary":{ 
     "totalQR":2000.0, 
     "totalQA":1500.0, 
     "totalMR":1000.0, 
     "totalMA":500.0 
     } 
    } 
} 

而且主要區別是一個總結。這是因爲summarymapmaps需要key每個entryset。這意味着summary是您的地圖,它有一個one_summary密鑰。

相關問題