【问题标题】:Java: Appending data to JSON and finding data from itJava:将数据附加到 JSON 并从中查找数据
【发布时间】:2017-12-09 21:44:37
【问题描述】:

大家好!我已经尝试解决这个问题好几个小时了。我的最后一项任务是在我的 Java 程序中添加 JSON 数据操作,我们已经学会了 0 条关于它的信息,所以我用很少的 JSON 知识来做这件事。我需要这样做,以便我的程序可以 1)在 JSON 文件中写入和存储用户信息,以及 2)过滤所述 JSON 文件以检索信息。

我取得了一些进展,但我碰壁了。这是写入 JSON 文件的方法:

    public void createUser(String username, String password) {
    profileObj = new JSONObject();
    JSONArray list = new JSONArray();
    // Put values into JSON
    profileObj.put("username", username);
    profileObj.put("password", password);

    try (FileWriter file = new FileWriter("data.json", true)) {

        file.append(profileObj.toJSONString());
        file.flush();

    } catch (IOException e) {
        e.printStackTrace();
    }
}

如果我运行程序并创建 3 个配置文件,JSON 文件将如下所示:

{"password":"pass","username":"one"}
{"password":"pass","username":"two"}
{"password":"pass","username":"three"}

经过大量研究,我不确定这是否是读取 JSON 的正确格式。我也不知道如何创建一种方法来过滤 JSON 代码以查找特定的字符串值。我原来有这个方法:

    public boolean authenticate(String username, String password) {
    profileObj = new JSONObject();
    JSONParser parser = new JSONParser();
    try {
        Object obj = parser.parse(new FileReader("data.json"));
        JSONObject jsonObject = (JSONObject) obj;
        JSONObject userObject = (JSONObject) jsonObject.get("users");

        String usernameField = (String) jsonObject.get("username");
        String passwordField = (String) jsonObject.get("password");
        System.out.println(usernameField + " " + passwordField);
        System.out.println(username + " " + password);

        if (username.equals(usernameField) && password.equals(passwordField))
            return true;

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return false;
}

但是,该方法仅在 JSON 文件中有 1 个用户和密码时才有效。它不能读取多个集合。

最终目标是拥有一个可读的 JSON 文件和一个可以搜索键值(即特定用户名或密码)的方法。

我已经在互联网上搜索并调试了几个小时。帮助将不胜感激。谢谢!

【问题讨论】:

    标签: java json get extract put


    【解决方案1】:

    我建议你将Google Gson与POJO User对象结合使用:

    private final Gson gson = new Gson();
    private final String filename = "data.json";
    
    private class User {
        String username;
        String password;
        public User(String username, String password) {
            this.username = username;
            this.password = password;
        }
    }
    

    方法如下所示:

    public void addUser(String username, String password) {
        try {
            List<User> users = readUsers(filename);
            users.add(new User(username, password));
            Writer writer = new BufferedWriter(new FileWriter(filename, false));
            gson.toJson(users, writer);
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    public boolean authenticate(String username, String password) {
        try {
            List<User> users = readUsers(filename);
            return users.stream().anyMatch(user -> username.equals(user.username) && password.equals(user.password));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }
    
    private List<User> readUsers(String filename) throws IOException {
        Gson gson = new Gson();
        BufferedReader reader = new BufferedReader(new FileReader(filename));
        List<User> users = gson.fromJson(reader, new TypeToken<List<User>>() {}.getType());
        reader.close();
        return users == null ? new ArrayList<>() : users;
    }
    

    【讨论】:

      猜你喜欢
      • 2020-03-08
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多