gpt4 book ai didi

java - 在标量值上使用文字样式,以通过 Jackson 进行 YAML 序列化

转载 作者:行者123 更新时间:2023-11-29 08:32:52 25 4
gpt4 key购买 nike

我正在使用Jackson将对象序列化为 YAML(jackson-dataformat-yaml 库)。

我想生成literal style标量值的输出(例如以下示例中的“描述”),例如

---
id: 4711
description: |
FooBar
HelloWorld

但我只能产生这样的引用标量:

---
id: 4711
description: "FooBar\nHelloWorld"

我用来生成 ObjectMapper 的代码(到目前为止)非常简单:

    YAMLFactory f = new YAMLFactory();
f.enable(YAMLGenerator.Feature.SPLIT_LINES); // setting does not matter
ObjectMapper objectMapperYaml = new ObjectMapper(f);
String yaml = objectMapperYaml.writeValueAsString(someObject);

我猜想有可能生成文字样式标量值,但我不知道如何生成。欢迎任何提示!

最佳答案

如果您要单独使用 SNAKEYaml,则需要设置相应的转储器选项:

DumperOptions dumperOptions = new DumperOptions();
dumperOptions.setDefaultScalarStyle(ScalarStyle.LITERAL);

遗憾的是,这里无法通过 JacksonFeature 来完成。

快速浏览一下源代码,发现要启用的功能是 MINIMIZE_QUOTES,您将在 YAMLGenerator#writeString 中找到他们的算法。

这是完整的类(class):

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator;

public class NewClass {

private int id;

private String description;

public static void main(String... a) throws JsonProcessingException {
YAMLFactory f = new YAMLFactory();
f.enable(YAMLGenerator.Feature.MINIMIZE_QUOTES);
ObjectMapper objectMapperYaml = new ObjectMapper(f);

final NewClass someObject = new NewClass();
someObject.setId(4711);
someObject.setDescription("Hallo\nWorld!");
System.out.println(objectMapperYaml.writeValueAsString(someObject));
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}
}

关于java - 在标量值上使用文字样式,以通过 Jackson 进行 YAML 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46526906/

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