使用gson将JSON转换为java对象
我正在使用GSON库来处理来自web服务的图灵JSON,但我无法让它工作,我总是得到一个空值。我研究过类似的问题,比如将Json转换为Java,比如。但我还是错过了一些东西 JSON java类使用gson将JSON转换为java对象,java,android,json,gson,Java,Android,Json,Gson,我正在使用GSON库来处理来自web服务的图灵JSON,但我无法让它工作,我总是得到一个空值。我研究过类似的问题,比如将Json转换为Java,比如。但我还是错过了一些东西 JSON java类 SiteWrapper m = gson.fromJson(json, SiteWrapper.class); System.out.println(m.getMenu()); static class Site { static String A; static String B;
SiteWrapper m = gson.fromJson(json, SiteWrapper.class);
System.out.println(m.getMenu());
static class Site {
static String A;
static String B;
static String C;
static String D;
static String E;
static String F;
static String G;
public String toString() {
return String.format(A,B,C,D,E,F,G);}
public static String getA() {
return A;
}
public static String getB() {
return B;
}
... all the way to getG
public void setA(String A) {
Site.A = A;
}
public void setB(String B) {
Site.B = B;
}
... all the way to setB
还有我的包装纸
class SiteWrapper {
private Site site;
public Site getMenu() { return site; }
public void setMenu(Site site) { this.site = site; }
}
无论我做什么,我都会得到一个空打印,有什么想法吗?问题是,在您的代码中,您正在传递
SiteWrapper.class
,而您应该传递Site.class
到gson.fromJSON
这条线
SiteWrapper m = gson.fromJson(json, SiteWrapper.class);
应该是
Site s = gson.fromJSON(json, Site.class);
Site
是您为提供的JSON定义的类SiteWrapper
包含站点变量,您需要将此site
变量设置为每个文档的fromJSON
结果,默认情况下排除所有静态字段。按照链接中的示例更改默认排除策略,以便接受静态
创建Gson
对象时,请尝试以下操作:
Gson gson = new GsonBuilder()
.excludeFieldsWithModifier(Modifier.TRANSIENT,Modifier.VOLATILE)
.create();
这将创建一个默认情况下不会排除静态字段的
Gson
对象。,因为它是一个静态内部类。如前所述和注释所示:
同样,如果一个字段被标记为“static”,那么默认情况下它将是静态的
排除。如果要包含一些瞬态字段
你可能想试试
Gson gson = new GsonBuilder()
.excludeFieldsWithModifier()
.create();
此外,由于它是一个内部类,如果可以,您可能需要更改JSON:
{
"site":{
"A":"val1",
"B":"val2",
"C":"val3",
"D":"val4",
"E":"val5",
"F":"val6",
"G":"val7"
}
}
正如本书“一路挫折”中所述,我想你的意思是“setG”?虽然这肯定会导致问题,但这本身不会起作用。默认情况下排除静态。您需要使NuclearHost答案中建议的更改和我的更改正常工作。
{
"site":{
"A":"val1",
"B":"val2",
"C":"val3",
"D":"val4",
"E":"val5",
"F":"val6",
"G":"val7"
}
}