2011-02-16 74 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); 

具有完全型参考;在这种情况下可选,因为您只需要列表,地图和字符串。

相关问题