Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用gson将JSON转换为java对象_Java_Android_Json_Gson - Fatal编程技术网

使用gson将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;

我正在使用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;
    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"
   }
}