ObjectMapper -如何使用Jackson将项目追加到现有的YAML文件

wpcxdonn  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(172)

我想在yaml文件中添加一些实体,比如日志操作,就像这样。

item:
        entityType: article
        entityId: 318 
        created: 1655282744819 
        user: "admin"
        title: "Morning" 
        eventType: "viewing"

    item:
        entityType: event
        entityId: 339 
        created: 1655223444821 
        user: "admin"
        title: "Evening" 
        eventType: "editing"

但我面临的情况下,我可以写yaml到一个新的文件只能。

objectMapper.writeValue(new File(path), logItem);

是否有任何可能追加数据到现有文件?提前感谢。

hkmswyz6

hkmswyz61#

加载YAML,将新数据放入解析后的数据中,然后再次将整个数据序列化到其来源的文件中。
您不能简单地追加到YAML文件中,因为YAML文件表示节点的有向图,并且在节点图上没有有意义的 * append * 定义。当然,在字符流上有 * append * 的定义,但是您要做的是修改这个流所表示的数据,也就是节点图。简单地连接两个字符流,其中每一个都是有效的YAML文档,不一定产生有效的YAML文档。
如果您真的很专注,您可以使用发出解析事件的低级API,将您的新结构 * 作为事件 * 注入到该事件流中,然后再次 * 呈现 * 它(将其转换回字符流)。This answer显示了这在PyYAML中是如何工作的,这在Jackson中是不可能,因为API级别太高,但是如果您想坚持使用Java,可以使用SnakeYAML。level API与PyYAML非常相似。但是要注意,这可能不是您实际想要做的,因为您不能将logItem作为类示例,您需要将其作为事件序列。

相关问题