繁体   English   中英

Java Json 重复按键

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM