gpt4 book ai didi

java - 如何使用 Jackson 将对象附加到现有 JSON 文件

转载 作者:行者123 更新时间:2023-11-30 02:32:18 31 4
gpt4 key购买 nike

如何使用 Jackson 将对象附加到现有 JSON 文件?

File file = new File("test.json");
if (!file.exists()) {
file.createNewFile();
}

ObjectMapper mapper = new ObjectMapper();

ObjectWriter writer = mapper.writer(new DefaultPrettyPrinter());
mapper.writeValue(file, wtf);

最佳答案

在您的问题中,“附加”可以有多种含义/解决方案,具体取决于您放置该词的上下文。例如:

  1. 简单地追加到文件,忽略现有的 JSON 结构。
  2. 追加到文件中现有的 JSON 数组。
    1. 追加到文件中现有的 JSON 数组,而 JSON 数组尚未关闭。
    2. 追加到文件中现有的 JSON 数组,而 JSON 数组已关闭。

示例#1 的解决方案:

// File output: {"name":"Foo","age":20} {"name":"Bar","age":30} {"name":"Baz","age":40}
public static void plainAppendExample() {
File file = new File("u:\\test.json");
ObjectMapper mapper = new ObjectMapper();
try {
JsonGenerator g = mapper.getFactory().createGenerator(new FileOutputStream(file));

mapper.writeValue(g, new Person("Foo", 20));
mapper.writeValue(g, new Person("Bar", 30));
mapper.writeValue(g, new Person("Baz", 40));
g.close();
} catch (IOException e) {
e.printStackTrace();
}
}

每个 writeValue() 都会将一个普通 JSON 对象附加到文件中,但忽略之前的 JSON 结构。

示例#2.1的解决方案:

// File output: [ {"name" : "Foo", "age" : 20}, {"name" : "Bar", "age" : 30}, {"name" : "Baz", "age" : 40} ]
public static void jsonArrayAppendExample2() {
try {
File file = new File("u:\\test.json");
FileWriter fileWriter = new FileWriter(file, true);

ObjectMapper mapper = new ObjectMapper();

SequenceWriter seqWriter = mapper.writer().writeValuesAsArray(fileWriter);
seqWriter.write(new Person("Foo", 20));
seqWriter.write(new Person("Bar", 30));
seqWriter.write(new Person("Baz", 40));
seqWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}

每个 write() 都会追加到文件中现有的 JSON 数组,直到调用 close() 为止。

示例#2.2的解决方案:我还没有找到解决方案。在这种情况下,解决方案应通过替换数组结束字符 ] 来修改文件,然后执行追加。

或者,如果性能和内存不是问题,您可以将 JSON 文件重新读取为 Java 对象,然后添加新的 JSON 对象,然后再次写入该文件。

注意:请注意,我不是 Jackson 专家,所以我不知道我的解决方案是否是最佳解决方案。

关于java - 如何使用 Jackson 将对象附加到现有 JSON 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43981487/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com