0

I am trying to store a game result in a JSON file. The results are stored when the game is over, and are supposed to be displayed afterwards in a table.

I have this function that creates the game score and adds it to json file using GSON

 private void createGameScoreGson () throws Exception {
        var gson = new GsonBuilder().setPrettyPrinting().create();
        var score = new ScoreResult();
        score.setPlayerName(name);
        score.setSteps(steps);
        score.setTime(time);
        score.setSolved(solved);

        // writing to a json file
        File file = new File("src\\main\\resources\\results.json");
        try (var writer = new FileWriter("resources\\results.json", true)) {
            gson.toJson(score, writer);
        }
}

That method creates a JSON file that looks like this:

{
    "playerName": "a",
    "steps": 1,
    "time": "00:00:11",
    "solved": false
}

The problem is when I try to add another game result to the file, it appears like this:

{
    "playerName": "a",
    "steps": 1,
    "time": "00:00:11",
    "solved": false
}
{
    "playerName": "b",
    "steps": 2,
    "time": "00:00:20",
    "solved": false
}

Which is not a valid JSON file and so it is not read properly when I try to show the results later. How can I use Gson (or anything else really) to show the results in the JSON file like this:

[
 {
    "playerName": "a",
    "steps": 1,
    "time": "00:00:11",
    "solved": false
 },
 {
    "playerName": "b",
    "steps": 2,
    "time": "00:00:20",
    "solved": false
 }
]

Any suggestion will be helpful!

1 Answer 1

2

this should work for you, but if there are a lot of entries in the file, then I think it will be necessary to change the approach.

add maven dependecy:

        <dependency>
            <groupId>com.googlecode.json-simple</groupId>
            <artifactId>json-simple</artifactId>
            <version>1.1.1</version>
        </dependency>
public void createGameScoreGson () throws Exception {
        ScoreResult score = new ScoreResult();
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        JSONArray jsonArray = parseFromFile();
        
        // You can create file if you need
        try (FileWriter writer = new FileWriter("src/main/resources/results.json", false)) {
            String gs = gson.toJson(score);
            Map map = gson.fromJson(gson.toJson(score), Map.class);
            jsonArray.add(map);
            String jsonPretty = gson.toJson(jsonArray);
            writer.write(jsonPretty);
        }
    }
public JSONArray parseFromFile() throws IOException {
        JSONParser parser = new JSONParser();
        try {
            return (JSONArray) parser.parse(new FileReader("src/main/resources/results.json"));
        }
        catch (ParseException e){
            return new JSONArray();
        }
        catch (FileNotFoundException e){
            return null; // any code
        }
    }
Sign up to request clarification or add additional context in comments.

1 Comment

Hey Boris! sorry for the late reply. I just wanted to thank you! this worked for me. Thanks a lot mate:D

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.