Désérialisation HashMaps nestede dans Google GSON

Dans mon projet actuel, j’utilise la bibliothèque GSON dans Android, et j’ai rencontré un problème de désérialisation nestede de Maps. Voici à quoi ressemble le JSON initial

{ "5":{ "id":5, "name":"initial name", "image_url":"uploads/71d44b5247cc1a7c56e62fa51ca91d9b.png", "status":"1", "flowers":{ "7":{ "id":7, "category_id":"5", "name":"test", "description":"some description", "price":"1000", "image_url":"uploads/test.png", "status":"1", "color":"red", } } } } 

Et mon pojo

 class Category { long id; Ssortingng name; Ssortingng image_url; HashMap flowers; } 

Et classe de fleurs

 class Flower { long id; Ssortingng category_id; Ssortingng name; Ssortingng description; Ssortingng price; Ssortingng image_url; Ssortingng status; } 

Mais quand j’essaie de désérialiser ces objects, je peux accéder à hashmaps nested, le code d’exemple est

 public class TestJson { public static void main(Ssortingng[] args) { Gson gson = new Gson(); try { BufferedReader br = new BufferedReader( new FileReader("2.txt")); HashMap map = gson.fromJson(br, HashMap.class); Collection asd = map.values(); System.out.println(map.values()); } catch (IOException e) { e.printStackTrace(); } } } 

Aucune suggestion?

Ce gson.fromJson(br, HashMap.class); indique à Gson que vous souhaitez effectuer la désérialisation sur une carte de type valeur inconnue. Vous seriez tenté de spécifier quelque chose comme Map.class , mais vous ne pouvez pas le faire en Java, la solution consiste à utiliser ce qu’ils ont appelé TypeToken dans Gson.

 Map categoryMap = gson.fromJson(br, new TypeToken>(){}.getType());