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<String,Flower> flowers;
}
和花类
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<String,Category> map = gson.fromJson(br, HashMap.class);
Collection<Category> asd = map.values();
System.out.println(map.values());
} catch (IOException e) {
e.printStackTrace();
}
}
}
有什么建议?
回答:
这gson.fromJson(br,
HashMap.class);告诉Gson您想反序列化为未知值类型的Map。您可能会想指定类似的东西Map<String,Category>.class
,但是您无法在Java中进行指定,因此解决方案是使用他们在Gson中称为TypeToken的东西。
Map<String, Category> categoryMap = gson.fromJson(br, new TypeToken<Map<String, Category>>(){}.getType());
以上是 Google GSON嵌套HashMaps反序列化 的全部内容, 来源链接: utcz.com/qa/399375.html