Gson,创建一个JsonObjects的简单JsonArray

时间:2016-04-14 21:14:50

标签: java json gson

我正在尝试使用gson构建JsonObject的JsonArray。 每个JsonObject将采用以下格式,

{"image":"name1"}
{"image":"name2"}

等等。

我有一个名字的字符串数组(“name1”,“name2”,...) 我无法直接将字符串数组转换为JsonArray。我正在尝试迭代地创建JsonObjects并将其添加到JsonArray。

        JsonObject innerObject;
        JsonArray jArray = new JsonArray();
        for(int i = 0; i<names.length; i++)
        {
            innerObject = new JsonObject();
            innerObject.addProperty("image",names[i]);
            jArray.add(innerObject);
        } 

但据我所知,JsonArray中的add方法接受一个JsonElement,在这里我给了一个JsonObject。我找不到将JsonObject转换为JsonElement的方法。 当我这样做时,使用gson的全部意义都将消失。还有更好的方法吗?

3 个答案:

答案 0 :(得分:5)

首先,创建一个表示单个json对象的类,例如:

class MyObject {
    private String image;

    public MyObject(String name) { image = name; }
}

Gson将使用类的变量名来确定要使用的属性名称。

然后使用您可用的数据创建一个数组或列表,例如

ArrayList<MyObject> allItems = new ArrayList<>();
allItems.add(new MyObject("name1"));
allItems.add(new MyObject("name2"));
allItems.add(new MyObject("name3"));

最后,要序列化为Json,请执行:

String json = new Gson().toJson(allItems);

将数据从json恢复到数组:

MyObject[] items = new Gson().fromJson(json, MyObject[].class);

对于简单(反)序列化,不需要直接处理Json类。

答案 1 :(得分:2)

如果您打算使用GSON,请使用它来转换为对象

List<Image>images = new Gson().fromJson(json, Image[].class);

获取json字符串

String json = new Gson().toJson(images);

这是gson的观点,你不应该用循环和东西操纵数据。您需要利用其强大的模型解析功能。

答案 2 :(得分:1)

也许为时已晚,但是...如果您不需要创建新类,有一种方法可以解决:

import com.google.gson.JsonObject;
import com.google.gson.JsonArray
...
...
JsonArray jobj = new JsonArray();
String[] names = new String[]{"name1","name2","name3"};
for(String name : names) {
   JsonObject item = new JsonObject();
   item.addProperty("name",name);
   jobj.add(item);
}
System.out.println(jobj.toString());// ;)