我正在尝试使用 GSON 库从维基百科反序列化一些 JSON。通常,我会像在 JSON 中一样在 Java 中创建每个对象,例如:
{
query: {
pages: {
page: {
pageid: 168079,
ns: 0,
title: "2010 FIFA World Cup"
}
}
}
}
这将允许我使用以下 Java 代码进行反序列化:
class PageIdResponseGson
{
private QueryResults query;
public static class QueryResults
{
private PageResults pages;
public PageResults getPages() {
return pages;
}
}
public static class PageResults
{
private PageResult page;
public PageResult getPage() {
return page;
}
}
public static class PageResult
{
private int pageid;
private int ns;
private String title;
public int getNs() {
return ns;
}
public int getPageid() {
return pageid;
}
public String getTitle() {
return title;
}
}
public QueryResults getQuery() {
return query;
}
}
但是维基百科 JSON 使用 page-id 作为对象名称,这意味着我不能采用这种方法。
{
query: {
pages: {
168079: {
pageid: 168079,
ns: 0,
title: "2010 FIFA World Cup"
}
}
}
}
有没有办法使用某种通用包装器来处理这些动态对象名称?
最佳答案
这里有几种选择:
- 您使用 Hashmaps-->任何东西都可以是 hashmap 中的键,GSON 就可以了。
- 您实现自己的 TypeAdapter 和 TypeAdapterFactory 来处理此类情况,当您遇到目标类中不存在的数字字段时,您就知道您拥有 pageId,并且应该将其重新映射到您的 PageResults.page 成员上.
关于java - GSON:反序列化通用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9214218/