簡體   English   中英

使用Jackson將JSON字符串轉換為Java映射時出錯

[英]Error converting JSON string to map in Java using Jackson

我有這段小代碼,我正在嘗試將JSON字符串轉換為地圖。

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: java.io.StringReader@1b1756a4; 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)

我究竟做錯了什么?

從我記得傑克遜用於將json轉換為java類 - 它可能期望第一個對象是讀取是一個地圖,如

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

右:你要求Jackson將JSON數組映射到一個對象中; 沒有明顯的方法可以做到這一點。 所以,tofarr的答案是正確的。

但是如果你想要一個List或一個數組,你可以通過以下方式輕松實現:

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

或者使用完整類型參考; 在這種情況下是可選的,因為您只需要列表,地圖和字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM