4

Webサービスから提供されるJSONを調整するためにGSONライブラリを使用していますが、それを機能させることができず、常にnullが発生します。GSONを使用したSimpleJsonからJavaへの変換など、JsonからJavaへの変換のような同様の問題を調べました。しかし、私はまだ何かが欠けています

JSON

{"A":"val1","B":"val2","C":"val3","D":"val4","E":"val5","F":"val6","G":"val7"}
         SiteWrapper m = gson.fromJson(json, SiteWrapper.class);

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; }
}

何をしてもnullが印刷されますが、アイデアはありますか?

4

3 に答える 3

2

その静的内部クラス以来。ドキュメントが指摘し、コメントしているように:

同様に、フィールドが「静的」としてマークされている場合、デフォルトで除外されます。いくつかの一時的なフィールドを含めたい場合...

あなたは試してみたいかもしれません

 Gson gson = new GsonBuilder()
    .excludeFieldsWithModifier()
    .create();

また、内部クラスであるため、JSONを変更する必要がある場合があります。

 {
   "site":{
      "A":"val1",
      "B":"val2",
      "C":"val3",
      "D":"val4",
      "E":"val5",
      "F":"val6",
      "G":"val7"
   }
}

この投稿でここに記載されているように

于 2013-01-16T22:20:14.550 に答える
0

問題は、あなたのコードでは、渡す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

于 2013-01-16T22:02:22.937 に答える
0

このドキュメントによると、すべての静的フィールドはデフォルトで除外されています。リンクの例に従って、静的が受け入れられるようにデフォルトの除外戦略を変更します。

Gsonオブジェクトを作成するときは、次のことを試してください。

Gson gson = new GsonBuilder()
    .excludeFieldsWithModifier(Modifier.TRANSIENT,Modifier.VOLATILE)
    .create();

これGsonにより、デフォルトで静的フィールドを除外しないオブジェクトが作成されます。

于 2013-01-16T22:04:08.520 に答える