1

私はこのエンティティを持っています

class Foo
{
   public String FooName;
   public String FooId;
}

Fooメソッドからの配列を取得し、次のようにjson文字列にシリアル化します

Foo[] foos = getFoos();
String json = gson.toJson(foos, Foo[].class);

これにより、

[
    {
       "FooName" : "FirstFoo",
       "FooId" : "1"
    },
    {
       "FooName" : "SecondFoo",
       "FooId" : "2"
    }
]

このようなラッパー属性が必要な場合を除いて、これは問題ありません。

{
  "foos":[
            {
               "FooName" : "FirstFoo",
               "FooId" : "1"
            },
            {
               "FooName" : "SecondFoo",
               "FooId" : "2"
            }
         ]
}

ラッパークラスを作成できることはわかっています

class Foos
{
    Foo[] foos;
}

そしてgsonでFoos.classを使用しますが、私にはのようなクラスが何百もありFoo、それぞれのラッパークラスを作成するのは嫌です。また、ラッパー属性を追加するために返された元のjsonに対して文字列操作を行うことも考えていましたが、プランB(またはC)でもそれを維持しています。したがって、gsonに、上記で求めているようなラッパー属性を追加する方法があるかどうか疑問に思いました。

ありがとう。

4

2 に答える 2

2

これを手動で行う方法は次のとおりです。

final Gson gson = new Gson();
final Foo[] foos = new Foo[] {};

final JsonElement elem = gson.toJsonTree(foos);
final JsonObject jsonObj = new JsonObject();
jsonObj.add("foo", elem);
System.out.println(jsonObj.toString());
于 2013-03-06T01:45:16.910 に答える
1
JsonObject obj = new JsonObject();          
obj.add("foos", gson.toJsonTree(foos, Foo[].class));            
String json = obj.toString();
于 2013-03-06T01:46:10.940 に答える