2011-02-16 66 views
4

我有這段小小的代碼,我試圖將JSON字符串轉換爲地圖。將JSON字符串轉換爲使用Jackson在Java中映射時出錯

String json = "[{'code':':)','img':'<img src=/faccine/sorriso.gif>'}]"; 
ObjectMapper mapper = new ObjectMapper(); 
Map<String,String> userData = mapper.readValue(json,new TypeReference<HashMap<String,String>>() { }); 

但它返回以下錯誤:

org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.HashMap out of START_ARRAY token 
at [Source: [email protected]; line: 1, column: 1] 
    at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163) 
    at org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:198) 
    at org.codehaus.jackson.map.deser.MapDeserializer.deserialize(MapDeserializer.java:151) 
    at org.codehaus.jackson.map.deser.MapDeserializer.deserialize(MapDeserializer.java:25) 
    at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2131) 
    at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1402) 
    at CodeSnippet_19.run(CodeSnippet_19.java:13) 
    at org.eclipse.jdt.internal.debug.ui.snippeteditor.ScrapbookMain1.eval(ScrapbookMain1.java:20) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.eclipse.jdt.internal.debug.ui.snippeteditor.ScrapbookMain.evalLoop(ScrapbookMain.java:54) 
    at org.eclipse.jdt.internal.debug.ui.snippeteditor.ScrapbookMain.main(ScrapbookMain.java:35) 

我在做什麼錯?

回答

5

從我記得傑克遜用於JSON轉換爲Java類 - 它可能是期待的第一個對象被讀取是一個地圖,像

String json = "{'code':':)','img':'<img src=/faccine/sorriso.gif>'}"; 
+0

現在確定它工作,但我必須使用像這樣的雙引號:String json =「{\」code \「:\」:)\「,\」img \「:\」 \「}」; – Laphroaig 2011-02-16 16:03:28

3

右:你問傑克遜映射JSON數組放入一個對象;沒有明顯的方法可以做到這一點。所以,tofarr的回答是正確的。

但是,如果你想要一個列表或數組,你可以很容易地通過實現它:

List<?> list = mapper.readValue(json, List.class); 

具有完全型參考;在這種情況下可選,因爲您只需要列表,地圖和字符串。

相關問題