2011-02-16 2 views
4

J'ai ce petit bout de code, et j'essaye de convertir une chaîne JSON en une carte.Erreur lors de la conversion d'une chaîne JSON en mappage Java en utilisant Jackson

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>>() { }); 

Mais il renvoie l'erreur suivante:

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) 

Qu'est-ce que je fais mal?

Répondre

5

D'après ce que je me souviens Jackson est utilisé pour convertir JSON classes java - il attend probablement le premier objet est lit comme une carte, comme

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

ok maintenant cela fonctionne mais je dois utiliser doublequote comme ceci: String json = "{\" code \ ": \":) \ ", \" img \ ": \" \ "}"; – Laphroaig

+0

merci beaucoup! – Laphroaig

+0

Oui, JSON requiert des guillemets doubles pour les noms de propriété (bien que certains parseurs, y compris Jackson, autorisent des modes non standard qui peuvent desserrer les restrictions) – StaxMan

3

droite: vous demandez Jackson mapper une JSON Array dans un objet; il n'y a pas de moyen évident de le faire. Donc, la réponse de Tofarr est correcte.

Mais si vous voulez une liste ou un tableau, vous pourriez atteindre facilement par:

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

Ou en référence de type complet; optionnel dans ce cas parce que vous voulez juste des listes, des cartes et des chaînes.

Questions connexes