【问题标题】:Writing multiple values in JSON on the same level through Jackson通过 Jackson 在同一级别上写入多个 JSON 值
【发布时间】:2020-02-10 23:18:02
【问题描述】:

现在我正在尝试用 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 文件,在同一级别上,并且只编辑预先存在的数据?

【问题讨论】:

标签: java json jackson jackson-databind


【解决方案1】:

您可以继续将 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);

【讨论】:

    猜你喜欢
    • 2015-08-05
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多