【发布时间】: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 文件和一个可以搜索键值(即特定用户名或密码)的方法。
我已经在互联网上搜索并调试了几个小时。帮助将不胜感激。谢谢!
【问题讨论】: