1

このようなJson文字列を取得する必要があります..

{"a":{"b":{"c":"5"}}}

Gson のドキュメントから、String を生成することができました。しかし、それを生成するには 3 つのクラスが必要でした。実装に何か問題がありますか。同じ実装のクラスを減らす方法はありますか。

これを生成するために使用されるクラスを見つけてください..

public class c { String c="5";}

public class b {
@SerializedName("b")
c cobj = new c();}

public class a {
 @SerializedName("a")
b cobj =new b();}

public static void main (String args[]){
    Gson gs=new Gson();
    a aobj=new a();
    System.out.println(gs.toJson(aobj));
}

よろしくお願いします...

4

1 に答える 1

2

何も間違ってない。JSON では、{}はオブジェクトを示すため、文字列は 3 つのネストされたオブジェクトを提供します。JSON 構文を参照してください

内部クラスを探している場合、static内部クラスはシリアル化と逆シリアル化の両方ですぐに使用できます。3 セットの中かっこは 3 つのクラスを意味するため、次のコードがあなたが持っているものよりもはるかに短いかどうかはわかりません。フィールド名が異なるため、3 つの異なるクラスを意味します。内部データ構造は、単に「短い」だけでなく、論理的に理解できるように開発する必要があります。

必要なフィールドに一致するようにフィールドの名前を変更することで、注釈を取り除くことができます。

class TopObj {
    static class AClass {
        static class BClass {
            String c = "5";
        };    
        B b = new b();
    };    
    a a = new a();
};

別の見方として、3 つのクラスはすべて同じクラス タイプですが、異なるフィールドを使用しているだけです。JSON への変換時に、値を持つフィールドのみが入力されます。上で述べたように、データは別個のクラスを意味しますが、1 つのクラス定義でそれを行うことができます -

class Trickery {    
    Trickery a;
    Trickery b;
    String c;
};

次に、記載されているフィールドのみを使用します。

Trickery top = new Trickery();
top.a = new Trickery();
top.a.b = new Trickery();
top.a.b.c = "5";
System.out.println(gson.toJson(top));
于 2013-01-15T05:14:54.000 に答える