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
, 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