web-dev-qa-db-fra.com

Gson à HashMap

Existe-t-il un moyen de convertir une chaîne contenant json en HashMap, où chaque clé est une clé json et la valeur est la valeur de la clé json? Le json n'a pas de valeurs imbriquées. J'utilise la lib Gson.

Par exemple, étant donné JSON:

{
"id":3,
"location":"NewYork"
}

hashMap résultant:

<"id", "3">
<"location", "NewYork">

Merci

50
Daniel Amerbauer

Utilisez TypeToken , selon la FAQ GSON :

Gson gson = new Gson();
Type stringStringMap = new TypeToken<Map<String, String>>(){}.getType();
Map<String,String> map = gson.fromJson(json, stringStringMap);

Pas de casting. Aucune création d'objet inutile.

112
Matt Ball

Si j'utilise la solution TypeToken avec une carte <Enum, Object> j'obtiens "clé en double: null".

La meilleure solution pour moi est:

String json = "{\"id\":3,\"location\":\"NewYork\"}";
Gson gson = new Gson();
Map<String, Object> map = new HashMap<String, Object>();
map = (Map<String, Object>)gson.fromJson(json, map.getClass());

Résultat:

{id=3.0, location=NewYork}
7
alexb83

J'aime:

private static class MyMap extends HashMap<String,String> {};
...
MyMap map = gson.fromJson(json, MyMap.class);
2
Ricardo Fodra