我怎样才能提取\&引用&引用;来自java中的json寄存器

我怎样才能提取\&引用&引用;来自java中的json寄存器,java,json,Java,Json,我正在使用java的库(Gson)将新用户存储在一个名为“Users.json”的文件中。当我注册一个新用户时,我的代码读取文件中以前的数据,以转换并添加用户列表中的新数据,将新内容写入json文件。 读取以前的数据时会出现问题,因为它的存储方式与下一个示例类似: [ { "name": "First", "second_name": "User", "age": "27", "email": "data1email@email.com", "user

我正在使用java的库(Gson)将新用户存储在一个名为“Users.json”的文件中。当我注册一个新用户时,我的代码读取文件中以前的数据,以转换并添加用户列表中的新数据,将新内容写入json文件。 读取以前的数据时会出现问题,因为它的存储方式与下一个示例类似:

[
  {
    "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();}
}

您的代码有两个问题

  • 您正在从文件中读取上一个对象,并覆盖较旧的对象。这意味着该文件将始终包含最后两个对象,而不是较旧的对象。(除非这是您想要的。)
  • 您正在手动读取json文件并在
    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();