集合的Gson属性名称

时间:2013-03-06 01:32:50

标签: java json gson

我有这个实体

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,但是我有100个像Foo这样的类,我不想为每个类创建一个包装类。我还在考虑对原来的json做一些字符串操作,返回添加包装器attribut,但我保留了计划B(甚至是C)。 所以,我想知道在gson中是否有办法添加一个包装器属性,就像我上面提到的那样。

感谢。

2 个答案:

答案 0 :(得分: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());

答案 1 :(得分:1)

JsonObject obj = new JsonObject();          
obj.add("foos", gson.toJsonTree(foos, Foo[].class));            
String json = obj.toString();