我怎样才能提取\&引用&引用;来自java中的json寄存器
我正在使用java的库(Gson)将新用户存储在一个名为“Users.json”的文件中。当我注册一个新用户时,我的代码读取文件中以前的数据,以转换并添加用户列表中的新数据,将新内容写入json文件。 读取以前的数据时会出现问题,因为它的存储方式与下一个示例类似:我怎样才能提取\&引用&引用;来自java中的json寄存器,java,json,Java,Json,我正在使用java的库(Gson)将新用户存储在一个名为“Users.json”的文件中。当我注册一个新用户时,我的代码读取文件中以前的数据,以转换并添加用户列表中的新数据,将新内容写入json文件。 读取以前的数据时会出现问题,因为它的存储方式与下一个示例类似: [ { "name": "First", "second_name": "User", "age": "27", "email": "data1email@email.com", "user
[
{
"name": "First",
"second_name": "User",
"age": "27",
"email": "data1email@email.com",
"user_id": "UtPdadq",
"password": "email1Password123"
}
]
并且有了新的数据:
[
{
"name": "\"First\"",
"second_name": "\"User\"",
"age": "\"27\"",
"email": "\"data1email@email.com\"",
"user_id": "\"UtPdadq\"",
"password": "\"email1Password123\""
},
{
"name": "Second",
"second_name": "User",
"age": "28",
"email": "data2email@email.com",
"user_id": "ehOFXzI",
"password": "email2Password123"
}
]
我将向您介绍用户类和主函数以了解更多信息
public class User {
//user's variables
String name;
String second_name;
String age;
String email;
String user_id; //automatically generated
String password;
//constructor without parameters
public User(String nameUser, String second_name_user, String ageUser, String emailUser, String passwordUser) {}
//coonstructor with parameters
public User(String name, String second_name, String age, String email, String user_id, String password) {
this.name = name;
this.second_name = second_name;
this.age = age;
this.email = email;
this.user_id = user_id;
this.password = password;
}
public User() {
}
//Setters and getters
}
主要的
public static void signUp(String filename) {// add user
System.out.println("Please, remember that you should restart this app when you are registered.");
User new_user = new User();//new user's instance
Scanner scanner = new Scanner(System.in);
System.out.println("Enter data: ");
System.out.println("==================");
String id = generateUserId() ;
System.out.println("Enter your email: ");
String emailUser = scanner.nextLine();
System.out.println("Enter your password: ");
String passwordUser = ingressPassword();
System.out.println("Enter your name: ");
String nameUser = scanner.nextLine();
System.out.println("Enter your second name: ");
String second_name_User = scanner.nextLine();
System.out.println("Enter your age: ");
String ageUser = scanner.nextLine();
new_user.setUser_id(id);
new_user.setEmail(emailUser);
new_user.setPassword(passwordUser);
new_user.setName(nameUser);
new_user.setSecond_name(second_name_User);
new_user.setAge(ageUser);
//Test
//System.out.println(new_user.getClass());
try
{
//new file instance at the path
File file = new File(filename);
//tries to create new file in the system
boolean bool=file.createNewFile();
Path path = Paths.get(filename);
List< User > users = new ArrayList< >();
if(bool){
users.add(new_user);
try (Writer writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
JsonElement tree = gson.toJsonTree(users);
gson.toJson(tree, writer);
}
System.out.println("Users written to file");
}else {
try (Reader reader = Files.newBufferedReader(path,
StandardCharsets.UTF_8)) {
JsonObject car=null;
JsonParser parser = new JsonParser();
JsonElement tree = parser.parse(reader);
JsonArray array = tree.getAsJsonArray();
for (JsonElement element: array) {
if (element.isJsonObject()) {
car = element.getAsJsonObject();
}
}
String idPrev = car.get("user_id").toString();
String emailPrev = car.get("email").toString();
String passPrev = car.get("password").toString();
String namePrev = car.get("name").toString();
String snamePrev = car.get("second_name").toString();
String agePrev = car.get("age").toString();
//System.out.println(idPrev);
//add data to list
User userPrev = new User();
userPrev.setUser_id(idPrev);
System.out.println(userPrev.getUser_id());
userPrev.setEmail(emailPrev);
userPrev.setPassword(passPrev);
userPrev.setName(namePrev);
userPrev.setSecond_name(snamePrev);
userPrev.setAge(agePrev);
//two objects User: userPrev and new_user
System.out.println("*******************");
System.out.println(userPrev);
System.out.println("*******************");
System.out.println(new_user);
System.out.println("*******************");
//add User objects to the same List
users.add(userPrev);
users.add(new_user);
//json
try (Writer writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
JsonElement tree2 = gson.toJsonTree(users);
gson.toJson(tree2, writer);//write
}
System.out.println("Users written to file");
}
}
}catch (IOException e){e.printStackTrace();}
}
公共静态无效注册(字符串文件名){//添加用户
System.out.println(“请记住,注册后应该重新启动此应用程序。”);
User new_User=new User();//新用户的实例
扫描仪=新的扫描仪(System.in);
System.out.println(“输入数据:”);
System.out.println(“===============================”);
字符串id=generateUserId();
System.out.println(“输入您的电子邮件:”);
字符串emailUser=scanner.nextLine();
System.out.println(“输入密码:”);
字符串passwordUser=ingressPassword();
System.out.println(“输入您的姓名:”);
字符串nameUser=scanner.nextLine();
System.out.println(“输入您的第二个名字:”);
字符串second_name_User=scanner.nextLine();
System.out.println(“输入您的年龄:”;
字符串ageUser=scanner.nextLine();
新用户。设置用户id(id);
新建_user.setEmail(emailUser);
新用户设置密码(passwordUser);
新建_user.setName(nameUser);
新用户。设置第二个用户名(第二个用户名);
新用户设置(ageUser);
//试验
//System.out.println(new_user.getClass());
尝试
{
//路径上的新文件实例
文件=新文件(文件名);
//尝试在系统中创建新文件
布尔布尔布尔=file.createNewFile();
Path Path=Path.get(文件名);
列表users=newarraylist<>();
如果(bool){
用户。添加(新用户);
try(Writer-Writer=Files.newBufferedWriter(路径,StandardCharsets.UTF_8)){
Gson Gson=new GsonBuilder().setPrettyPrinting().create();
JsonElement tree=gson.toJsonTree(用户);
toJson(tree,writer);
}
System.out.println(“写入文件的用户”);
}否则{
try(Reader=Files.newbuffereder)(路径,
标准字符集(UTF_8)){
JsonObject car=null;
JsonParser=新的JsonParser();
JsonElement tree=parser.parse(reader);
JsonArray数组=tree.getAsJsonArray();
for(JsonElement元素:数组){
if(element.isJsonObject()){
car=element.getAsJsonObject();
}
}
字符串idPrev=car.get(“user_id”).toString();
字符串emailPrev=car.get(“email”).toString();
字符串passPrev=car.get(“密码”).toString();
字符串nameprov=car.get(“name”).toString();
字符串snameprov=car.get(“第二个名称”).toString();
字符串agePrev=car.get(“age”).toString();
//系统输出打印LN(idPrev);
//将数据添加到列表中
User userPrev=新用户();
userPrev.setUser_id(idPrev);
System.out.println(userPrev.getUser_id());
userPrev.setEmail(emailPrev);
userPrev.setPassword(passPrev);
userPrev.setName(nameprov);
userPrev.setSecond_名称(snameprov);
userPrev.setAge(agePrev);
//两个对象User:userPrev和new_User
System.out.println(“**********************”);
System.out.println(userPrev);
System.out.println(“**********************”);
System.out.println(新用户);
System.out.println(“**********************”);
//将用户对象添加到同一列表
users.add(userPrev);
用户。添加(新用户);
//json
try(Writer-Writer=Files.newBufferedWriter(路径,StandardCharsets.UTF_8)){
Gson Gson=new GsonBuilder().setPrettyPrinting().create();
JsonElement tree2=gson.toJsonTree(用户);
toJson(tree2,writer);//write
}
System.out.println(“写入文件的用户”);
}
}
}catch(IOE异常){e.printStackTrace();}
}
您的代码有两个问题
user
对象中设置每个属性。您应该让Gson为您这样做JsonObject car=null;
JsonParser=新的JsonParser();
JsonElement tree=parser.parse(reader);
JsonArray数组=tree.getAsJsonArray();
for(JsonElement元素:数组){
if(element.isJsonObject()){
car=element.getAsJsonObject();
}
}
字符串idPrev=car.get(“user_id”).toString();
字符串emailPrev=car.get(“email”).toString();