Как удалить фигурные скобки перед записью объекта JSON в java

Я пытаюсь сделать простую JSON-DB на Java, так как текущая библиотека на maven ужасно сложна. У меня есть этот метод, который принимает ключ и значение для помещения в JSONObject и записывает его в мой файл database.json.

public static void put(String path, String key, Object[] value){
        //creates new JSONObject where data will be stored
        JSONObject jsondb = new JSONObject();

        try{
            //adds key and value to JSONObject
            jsondb.put(key, value);

        } catch (JSONException e){
            e.printStackTrace();
        } //end try-catch

        try(PrintWriter out = new PrintWriter(new FileWriter(path, true))) {
            out.write(jsondb.toString());
            out.write(',');
        } catch (Exception e){
            e.printStackTrace();
        } //end try-catch
    } //end put()

Вот мой основной метод, когда я записываю некоторые данные в файл

public static void main(String[] args) throws Exception {

        String path = "app.json";

        Object[] amogus = {"Hello", 1, 2, 3, 4, 5};
        Object[] amogus1 = {"Hello", 1, 2, 3, 4, 5, 6, 7, 8, 9, 0};

        JsonDB db = new JsonDB(path);

        db.put(path, "arr", amogus);
        db.put(path, "arr1", amogus1);

    }

Что происходит, так это то, что он сохраняет все данные в наборе фигурных скобок. Поэтому, когда я пишу в файл более одного раза, как в своем основном методе, он сохраняет его следующим образом:

{"arr": ["Hello", 1, 2, 3, 4, 5]}{"arr1": ["Hello", 1, 2, 3, 4, 5, 6, 7, 8, 9, 0]}

Это приводит к тому, что VSCode выдает ошибку, поскольку это недействительный JSON. Как мне заставить метод удалить фигурные скобки и добавить запятые, чтобы сделать приведенный выше JSON действительным JSON? Кажется, я не могу найти документацию для этой библиотеки (библиотека org.json на maven).

Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
0
0
47
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это проблема синтаксиса. Ваш json не действительный, потому что jsonсинтаксис хочет, чтобы ваши данные были между фигурными скобками, как здесь:

{
    "arr": ["Hello", 1, 2, 3, 4, 5],
    "arr1": ["Hello", 1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
}

вместо этого, что не является допустимым json:

{"arr": ["Hello", 1, 2, 3, 4, 5]}
{"arr1": ["Hello", 1, 2, 3, 4, 5, 6, 7, 8, 9, 0]}

Создайте свои данные в объекте карты и позвольте вашему jsonбиблиотека преобразовать (сериализовать) ваш объект в действительный json.

Это проблема. Метод сделан так, чтобы вызываться и записывать данные в файл JSON столько раз, сколько захочет пользователь. Нет смысла создавать карту и жестко кодировать все, когда ее можно вызывать столько раз, сколько кто-то хочет в программе. Это решение будет состоять в том, чтобы оно закончилось, как ваш второй пример, после отдельного вызова во второй раз.

AlexStan0 23.04.2022 04:51

@ AlexStan0 результат, который вы получаете, нормальный, потому что вы пишете каждое новое значение в конце своего файла. Вместо этого вы можете передать карту в конструкторе или использовать метод putOnce. Взгляните на Javadoc stleary.github.io/JSON-java/org/json/JSONObject.html

Harry Coder 23.04.2022 05:07
Ответ принят как подходящий

Я решил эту проблему, прочитав все содержимое файла и добавив объект JSON, который я хотел записать в файл, а затем записать все сразу.

Другие вопросы по теме