android - 如何使用 Jackson 反序列化来自 json 对象的对象数组
问题描述
我正在尝试使用 Jackson 库反序列化以下 JSON。这个 JSON 与这个问题中提到的非常相似。我的问题是:如何反序列化以下 JSON?
{
"A": [
{
"id": 16,
"logo": "QJQSZzbXurElfHYcq6hcbPuaWKVfQU31lx2eSIIr.png",
},
{
"id": 20,
"logo": "AizaZzbXurElfHYcq6PuaWKV2761lx2eSLESASFr.png",
}
],
"B": [
{
"id": 42,
"logo": "tBYhHGTNTCYT60RZJydMyGgg47Tla36ISuRj4p0e.png",
},
{
"id": 44,
"logo": "kCZveUWo9eqIZc25deE4ln8llxlbBviRolk4PsCm.png",
}
]
}
这里是MonthTree
类:
public class MonthTree {
private int id;
private String logo;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getLogo() {
return logo;
}
public void setLogo(String logo) {
this.logo = logo;
}
}
但是,我尝试获取数组名称(A
and B
)id
和logo
属性的列表/数组,但我失败了。这是我试图做的事情:
ObjectMapper mapper = new ObjectMapper();
List<MonthTree> monthTrees = mapper.readValue(json_res, new TypeReference<List<MonthTree>>(){});
所以,我得到了以下异常:
无法反序列化
com.talmir.myApp.utils.MonthTree[]
超出 START_OBJECT 令牌的实例
ps 我是这个库的新手,所以不知道这个库还有什么功能。
解决方案
你可以这样做:
public class MonthTree {
private int id;
private String logo;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getLogo() {
return logo;
}
public void setLogo(String logo) {
this.logo = logo;
}
@Override
public String toString() {
return "MonthTree [id=" + id + ", logo=" + logo + "]";
}
public static void main(String[] args) {
String json = "{\n" +
" \"A\": [\n" +
" {\n" +
" \"id\": 16,\n" +
" \"logo\": \"QJQSZzbXurElfHYcq6hcbPuaWKVfQU31lx2eSIIr.png\"\n" +
" },\n" +
" {\n" +
" \"id\": 20,\n" +
" \"logo\": \"AizaZzbXurElfHYcq6PuaWKV2761lx2eSLESASFr.png\"\n" +
" }\n" +
" ],\n" +
" \"B\": [\n" +
" {\n" +
" \"id\": 42,\n" +
" \"logo\": \"tBYhHGTNTCYT60RZJydMyGgg47Tla36ISuRj4p0e.png\"\n" +
" },\n" +
" {\n" +
" \"id\": 44,\n" +
" \"logo\": \"kCZveUWo9eqIZc25deE4ln8llxlbBviRolk4PsCm.png\"\n" +
" }\n" +
" ]\n" +
"}";
try {
ObjectMapper mapper = new ObjectMapper();
Map<String, List<MonthTree>> map = mapper.readValue(json, new TypeReference<Map<String, List<MonthTree>>>(){});
Iterator<String> it = map.keySet().iterator();
while (it.hasNext()) {
String letter = (String) it.next();
List<MonthTree> list = map.get(letter);
for (MonthTree monthTree : list) {
System.out.println("Letter: "+letter+" MonthTree: "+monthTree);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
推荐阅读
- javafx - JavaFX 动画慢吗?
- python - 具有多线程的 Python 服务器:退出时出现 WinError 10038(关闭套接字)
- java - 两个声明会导致 ObjectFactory 类中的冲突。未能执行目标 org.apache.cxf:cxf-codegen-plugin:3.2.5:wsdl2java
- javascript - 使用 Bootstrap 上传文档/图像后如何显示自定义动画
- cookies - 当不在本地主机上时,在 OpenIdConnect 中间件 EventHandler 中添加的 Cookie 不会持续存在
- windows - 如何防止擦洗结束与媒体基金会的演示文稿
- sql - SQL Server:如果未定义 ESCAPE 参数,LIKE 运算符不会返回正确的结果
- hibernate - 混合 Hibernate 和原始 JDBC 事务
- python - 使用 Cartopy 在给定的经纬度周围绘制等面积地图
- c++ - 我可以在 SQLCipher 中拥有多个用户吗?