使用 Jackson 将 JSON 字符串转换为 Java 中的映射时出错
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5018340/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Error converting JSON string to map in Java using Hymanson
提问by Laphroaig
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.Hymanson.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.Hymanson.map.JsonMappingException.from(JsonMappingException.java:163)
at org.codehaus.Hymanson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:198)
at org.codehaus.Hymanson.map.deser.MapDeserializer.deserialize(MapDeserializer.java:151)
at org.codehaus.Hymanson.map.deser.MapDeserializer.deserialize(MapDeserializer.java:25)
at org.codehaus.Hymanson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2131)
at org.codehaus.Hymanson.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?
我究竟做错了什么?
回答by tofarr
From what I remember Hymanson is used to convert json to java classes - it is probably expecting the first object is reads to be a map, like
从我记得Hyman逊用于将 json 转换为 java 类 - 它可能期望第一个对象被读取为地图,例如
String json = "{'code':':)','img':'<img src=/faccine/sorriso.gif>'}";
回答by StaxMan
Right: you're asking Hymanson to map a JSON Array into an object; there is no obvious way to do that. So, tofarr's answer is correct.
对:您要求 Hymanson 将 JSON 数组映射到一个对象中;没有明显的方法可以做到这一点。所以,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.
或完整类型参考;在这种情况下是可选的,因为您只需要列表、地图和字符串。