我有一个看起来像带有对象的JSON数组的字符串:
myJsonArray = "[
{\"name\":\"alex\",\"weight\":\"88\"},
{\"name\":\"Emma\",\"weight\":\"71\"}
]";
将新对象添加到字符串的最简单方法是什么?
字符串(myJsonArray)被保存到程序会话之间的文件中,所以我必须处理字符串(myJsonArray)。
我知道Gson有一种将字符串数组转换为Java对象的好方法:
MyClass[] person = gson.fromJson(myJsonArray,MyClass[].class);
也许Gson有一个很好的方式?或不......
答案 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)
已经有一个答案显示如何使用GSON
从JSON
转换为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"}