Запись нескольких значений в JSON на одном уровне через Джексона - PullRequest
1 голос
/ 11 февраля 2020

Прямо сейчас я пытаюсь записать слова и их оценки в JSON, однако на самом деле их написание оказывается довольно трудным. Мой код для записи вещей относительно прост, и будет работать , если это будет только одно значение, однако мне нужно многократно обращаться к этим значениям.

Вот код, который я использую написать:

    public void write(String word) throws IOException {
        ValuedWord valuedWord = new ValuedWord(0,0,0,0,0,0,0,0);
        writer.withRootName(word).writeValue(generator, valuedWord);
    }

В идеале это должно дать что-то вроде этого:

{
    "WORD_A" : {
        "SCORE_1" : 0,
        "SCORE_2" : 0
    }, 

    "WORD_B" : {
        "SCORE_1" : 0,
        "SCORE_2" : 0
    }
}

Однако форматирование становится довольно странным, когда я делаю второе слово, превращаясь в два отдельных уровня вместо того, чтобы оставаться на одном уровне:

{
  "no" : {
    "joy" : 0.0,
    "anger" : 0.0,
    "sadness" : 0.0,
    "fear" : 0.0,
    "love" : 0.0,
    "disliking" : 0.0,
    "liking" : 0.0,
    "uses" : 0
  }
} {
  "yes" : {
    "joy" : 0.0,
    "anger" : 0.0,
    "sadness" : 0.0,
    "fear" : 0.0,
    "love" : 0.0,
    "disliking" : 0.0,
    "liking" : 0.0,
    "uses" : 0
  }
}

Также не помогает, что каждый раз, когда я пишу в файл, он сразу удаляет все, что уже существует.

Как бы Я добавляю данные в файл JSON на том же уровне и просто редактирую уже существующие данные?

1 Ответ

2 голосов
/ 11 февраля 2020

Вы можете продолжать добавлять ValuedWord объекты на карту с ключами как word и после создания всех ValuedWord объектов сериализовать в JSON.

Пример кода:

ValuedWord valuedWord1 = new ValuedWord(0,0,0,0,0,0,0,0);
ValuedWord valuedWord2 = new ValuedWord(0,2,3,0,0,0,0,0);

Map<String, ValuedWord> map = new HashMap<String, ValuedWord>();
map.put("WORD1", valuedWord1);
map.put("WORD2", valuedWord2);

String mapJson = objectMapper.writeValueAsString(map);
...