将JSON(或对象)添加到STRING json数组

时间:2015-12-10 10:00:33

标签: java arrays json gson

我有一个看起来像带有对象的JSON数组的字符串:

myJsonArray = "[
                {\"name\":\"alex\",\"weight\":\"88\"},
                {\"name\":\"Emma\",\"weight\":\"71\"}
               ]";

将新对象添加到字符串的最简单方法是什么?

字符串(myJsonArray)被保存到程序会话之间的文件中,所以我必须处理字符串(myJsonArray)。

我知道Gson有一种将字符串数组转换为Java对象的好方法:

 MyClass[] person = gson.fromJson(myJsonArray,MyClass[].class);

也许Gson有一个很好的方式?或不......

2 个答案:

答案 0 :(得分:2)

最简单的方法是在 myJsonArray 中为每个Json对象创建一个POJO模型,然后在List,Array或者您需要的任何内容中处理它......

示例

public class Person{

    @SerializedName("name")

    private String name;
    @SerializedName("weight")

    private int weight;

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * @param name
     *            the name to set
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * @return the weight
     */
    public int getWeight() {
        return weight;
    }

    /**
     * @param weight
     *            the weight to set
     */
    public void setWeight(int weight) {
        this.weight = weight;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", weight=" + weight + "]";
    }

    /**
     * @return json
     */
    public String toJson() {
        return new Gson().toJson(this);
    }

}

<强>反序列化

Gson gson = new Gson();
List<Person> personList = gson.fromJson(myJsonArray,Person.class);
personList.add(new Person());

答案 1 :(得分:1)

已经有一个答案显示如何使用GSONJSON转换为POJO,反之亦然。虽然从我的角度来看这是首选方法但是,您也可以仅使用GSON向json数组添加元素。

假设您的json数组字符串如下:

String myJsonArray = "["  
            + "{\"name\":\"alex\",\"weight\":\"88\"},"  
            + "{\"name\":\"Emma\",\"weight\":\"71\"}"
            + "]";

初始化Gson对象,如下所示:

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

将json String数组转换为JsonElement,如下所示:

JsonElement elements = gson.fromJson(myJsonArray, JsonElement.class); 

一旦你有JsonElement它包含你的json数组,那么你可以将其转换为JsonArray,如下所示:

JsonArray arr = elements.getAsJsonArray(); 

现在您的数组为JsonArray,您可以通过迭代元素打印出来,如下所示:

for(JsonElement e: arr) {
    System.out.println(e);
}

这会给你(基于上面的字符串):

{"name":"alex","weight":"88"}
{"name":"Emma","weight":"71"}

假设你想要在现有数组中添加一个新对象,但是你有一个json字符串形式的对象如下:

String newObject = "{\"name\":\"Raf\", \"weight\":\"173\"}"; 

//Creates new JsonElement from json string
JsonElement newElement = gson.fromJson(newObject, JsonElement.class);

现在您可以将此元素添加到现有数组中,如下所示:

arr.add(newElement);

最后你可以像我们之前那样打印你的新json数组:

for(JsonElement e: arr) {
    System.out.println(e);
}

你得到的输出是

{"name":"alex","weight":"88"}
{"name":"Emma","weight":"71"}
{"name":"Raf","weight":"173"}