2017-11-28 20 views
1

私のこれまでの質問は実際にどこにも届かなかったし、正しいことを尋ねていなかったか、あまりにも詳細でした。JSONクラスを別の名前のJavaクラスにデシリアライズ

私の基本的な質問は、クラス名が異なるJSONオブジェクトを、別のクラス名のJavaオブジェクトに逆シリアル化する方法です。

たとえば、サーバーが送信する/期待するJSONクラスは「18」です(これはコントロールしません)。私のJavaクラスは "18"なので、 "_18"です。

新しいGson()。fromJson()は、異なる命名ポリシーを使用しても、簡単には役に立ちませんでした。 _18オブジェクトは常にnullです。私は型アダプターとさまざまな注釈について読んだことがありますが、これにどう対処するかはまだ不明です。最も賢明な@SerializedNameと思われるメソッドは、明らかにクラス自体、フィールドメンバーだけでは使用できません。

18と呼ばれるクラスを持つJSONオブジェクトを_18というJavaクラスに逆シリアル化できますか(可能であれば、本当のクラスにすることができます)。要求によって

サンプルJSON、すべての

"18": { 
    "field1": "value1", 
    "field2": "value2", 
    "field3": "value3" 
} 
+1

は、以下のサンプル・テスト・ケースを参照してください? –

+0

サンプルJSONが編集で追加されました。 – sorinev

+0

Map : "18"がマップのキーになります。 –

答えて

2

まず - JSONクラスのない概念を持っていない - それは、オブジェクトの文字列表現です。 あなたの例は、不正な形式のJSONです。その順番でfield1field2field3プロパティを持つ別のクラスのようにフィールド「18」との有効なJSONオブジェクトであることを

{"18": 
{ 
    "field1": "value1", 
    "field2": "value2", 
    "field3": "value3" 
    } 
} 

:それは次のようでなければなりません。

サーバーがあなたのショーのようなJSON文字列を返す場合、それをパースするためには{}で囲む必要があります。そして、Javaクラスのプロパティ名は "18"になりますので、Javaの場合は@SerializedNameアノテーションで指定します。あなたが扱っているJSONのサンプルを投稿することができます

public static void main(String... args) throws Exception { 

    String testJson = "{\"18\":{\"name\":\"poomba\",\"value\":\"topchoomba\"}}"; 

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

    MyClassFor18 test18 = gson.fromJson(testJson, MyClassFor18.class); 

    System.out.println(test18); 

} 

private static class MyClassFor18 { 

    @SerializedName ("18") 
    private TestPojo valueObject; 

    public TestPojo getValueObject() { 
     return valueObject; 
    } 

    public void setValueObject(TestPojo valueObject) { 
     this.valueObject = valueObject; 
    } 

    @Override 
    public String toString() { 

     return "MyClassFor18 (value=" + valueObject + ")"; 
    } 

} 
private static class TestPojo { 

    private String name; 
    private String value; 

    public TestPojo(String name, String value) { 

     this.name = name; 
     this.value = value; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getValue() { 
     return value; 
    } 

    public void setValue(String value) { 
     this.value = value; 
    } 

    @Override 
    public String toString() { 

     return "TestPojo { name=" + this.name + ", value=" + this.value 
       + "}"; 
    } 
} 
関連する問題