简体   繁体   English

使用Jackson将JSON字符串转换为Java映射时出错

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

I have this little piece of code, and I'm trying to convert a JSON string to a map. 我有这段小代码,我正在尝试将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>>() { });

But it returns the following error: 但它返回以下错误:

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)

What am I doing wrong? 我究竟做错了什么?

从我记得杰克逊用于将json转换为java类 - 它可能期望第一个对象是读取是一个地图,如

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

Right: you're asking Jackson to map a JSON Array into an object; 右:你要求Jackson将JSON数组映射到一个对象中; there is no obvious way to do that. 没有明显的方法可以做到这一点。 So, tofarr's answer is correct. 所以,tofarr的答案是正确的。

But if you wanted a List or an array, you could achieved it easily by: 但是如果你想要一个List或一个数组,你可以通过以下方式轻松实现:

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

Or with full type reference; 或者使用完整类型参考; optional in this case because you just want Lists, Maps and Strings. 在这种情况下是可选的,因为您只需要列表,地图和字符串。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM