Google GSON嵌套了HashMaps反序列化

在我目前的项目中,我在android中使用了GSON库,我遇到了嵌套地图反序列化的问题。 这就是初学json的样子

{ "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", } } } } 

而我的pojo是

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

和花class

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

但是当我尝试反序列化这些对象时,我可以访问嵌套的哈希映射,示例代码是

 public class TestJson { public static void main(String[] 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(); } } } 

有什么建议么?

这个gson.fromJson(br, HashMap.class); 告诉Gson你要反序列化为未知值类型的Map。 你很想指定像Map.class这样的东西,但你不能用Java做到这一点,所以解决方案就是在Gson中使用他们所谓的TypeToken。

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