1.为什么要操作json数据
在我们平常的练习中,在不能用数据库的情况下,我们一般会把模拟数据存放在本地的json文件中,但是平常我们要对其进行修改与增加是非常困难的,其中包含了解析数据,修改数据,然后再写入数据。但是又迫于老师的压力,不得不使用该方案,说多了都是泪啊害......
2.进入正题
(1)第一步就是要解析数据
关于如何解析json数据,我的上一篇博客中详细讲解了操作流程,可以转到那边瞅瞅
(2)既然要修改数据,那我们就肯定需要一些原有的数据,此时我们可以模拟一些基本的用户数据,在本地新建一个data.json文件,手写一些数据
[
{
"id": 1,
"name": "John",
"age": 25
},
{
"id": 2,
"name": "Lucy",
"age": 35
},
{
"id": 3,
"name": "Bob",
"age": 35
}
]
(3)要有数据,肯定需要在新建关于该数据的Javabean,关于Java如何创建,在上一篇博客中也提到了,大家不会的可以去那边看。
class Data {
private int id;
private String name;
private int age;
public void setId(int id) {
this.id = id;
}
public Data() {
}
public Data(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
(4)最后一步就是修改数据,然后将新数据写入原来的json文件中即可
核心代码:
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.io.*;
import java.util.ArrayList;
public class update {
public static void main(String[] args) {
//读取用户数据存放到ArrayList集合当中
try (BufferedReader br = new BufferedReader(new FileReader("data.json文件地址"))) {
String json = "";
String line;
while ((line = br.readLine()) != null) {
json += line + "\n";
}
Gson gson = new Gson();
ArrayList<Data> dataList = gson.fromJson(json, new TypeToken<ArrayList<Data>>() {
}.getType());
//修改用户数据
int index = 0;//用户的下标
dataList.get(index).setName("zs");//设置用户的新信息
dataList.get(index).setAge(18);
String jsonString = gson.toJson(dataList); // 将List<User>对象转换为JSON字符串
//将新数据写入data.json文件中(此时修改原有的数据,但其他数据不会改变)
File file = new File("data.json文件地址");
BufferedWriter writer = null; // 创建BufferedWriter对象
try {
writer = new BufferedWriter(new FileWriter(file));
writer.write(jsonString); // 将JSON字符串写入文件
writer.close(); // 关闭BufferedWriter对象
System.out.println("数据修改成功");
} catch (IOException ex) {
throw new RuntimeException(ex);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
这里最主要的部分就是要将原来的ArrayList集合通过gson的toJson方法,将其转换为json字符串,其中idnex是用户的下标,这个可以灵活控制,文件写入也是用的最基本的File 配合 BufferedWriter,运行代码之后就可以看到json文件已经发生了变化,原来“John”已经被“zs”给覆盖了。
至此,修改本地json文件数据就结束了。