[英]Java Json Repeating the key
我总是有一个问题,我调用方法 addplayers 他插入到 jsonfile 所需的数组,但是,他总是创建新的密钥,所以,我试图在密钥播放器中插入一个新播放器,我总是创建一个新播放器。 我为此创建了一些条件但没有用,比如解析文件和检查密钥。
预期结果:
{ "players": [ { "current_Energy": 100, "level": 1, "name": "tenente", "experiencePoints": 0, "team": "Giants" }, { "current_Energy": 100, "level": 1, "name": "tenente", "experiencePoints": 0, "team": "Giants" }, { "current_Energy": 100, "level": 1, "name": "tenente", "experiencePoints": 0, "team": "Giants" } ] }
此刻的结果:
{ "players": [ { "current_Energy": 100, "level": 1, "name": "tenente", "experiencePoints": 0, "team": "Giants" }, { "current_Energy": 100, "level": 1, "name": "tenente", "experiencePoints": 0, "team": "Giants" }, { "current_Energy": 100, "level": 1, "name": "tenente", "experiencePoints": 0, "team": "Giants" } ] } { "players": [ { "current_Energy": 100, "level": 1, "name": "tenente", "experiencePoints": 0, "team": "Giants" }, { "current_Energy": 100, "level": 1, "name": "tenente", "experiencePoints": 0, "team": "Giants" }, { "current_Energy": 100, "level": 1, "name": "tenente", "experiencePoints": 0, "team": "Giants" } ] }
方法
public void addPlayer(PlayerManager playerManager) {
if (file.exists()) {
System.out.println("FODASEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE");
try {
PrintStream printStream = new PrintStream(new FileOutputStream("data.json",true));
JSONObject jsonObject = new JSONObject();
JSONArray jsonArray;
ArrayUnorderedList<Players> dataplayer = playerManager.getPlayersList();
try {
jsonObject = (JSONObject) new JSONParser().parse(new FileReader(file));
jsonArray = (JSONArray) jsonObject.get("players");
} catch (ParseException e) {
// Caso não exista, cria um novo objeto JSON com a chave "players"
jsonArray = new JSONArray();
}
Set<String> keys = new HashSet<>();
if (jsonObject.containsKey("players")) {
keys.add("players");
}
if (!keys.contains("players")) {
jsonArray = new JSONArray();
jsonObject.put("players", jsonArray);
} else {
jsonArray = (JSONArray) jsonObject.get("players");
}
for (Players player : dataplayer) {
JSONObject playerObject = new JSONObject();
playerObject.put("name", player.getName());
playerObject.put("team", player.getTeam().toString());
playerObject.put("level", player.getLevel());
playerObject.put("experiencePoints", player.getExperiencePoints());
playerObject.put("current_Energy", player.getCurrentEnergy());
jsonArray.add(playerObject);
}
printStream.println(jsonObject);
printStream.flush();
printStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
乍一看,问题似乎是您正在读取和更改您在 append 模式下打开的同一个文件:
PrintStream printStream = new PrintStream(new FileOutputStream("data.json",true));
那里的true
参数意味着您在该文件上写入的任何内容都将在写入时附加在末尾,这似乎与您所看到的行为兼容。
根据您需要实现的目标,您可能更愿意在不同的文件上写入 output。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.