![](/img/trans.png)
[英]Using Groovy 3 YamlBuilder with Yaml that contains a hyphen
[英]Write a literal YAML field using Groovy 3.0's new YamlBuilder
Groovy 3.0 有一個新的 YamlBuilder 類,它的工作方式與現有的 JsonBuilder 類類似。
我正在嘗試確定是否可以使用 YamlBuilder 在 YAML 中生成文字字段,例如:
data: |
this is
a literal
text value
我的第一個猜測是 Groovy 的多行字符串會起作用:
new YamlBuilder() {
data: '''\
this is
a literal
text value'''
}
但這給了我:
data: "this is\na literal\ntext value\n"`
我在 YamlBuilder Javadoc 中沒有看到任何有用的東西,並且 mrhaki 的示例沒有顯示這個用例。
有誰知道是否/如何做到這一點?
您可以執行以下操作:
import groovy.yaml.*
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import static com.fasterxml.jackson.dataformat.yaml.YAMLGenerator.Feature.LITERAL_BLOCK_STYLE
def yaml = new YamlBuilder()
yaml {
data '''\
this is
a literal
text value'''
}
println new ObjectMapper(new YAMLFactory().configure(LITERAL_BLOCK_STYLE, true)).writeValueAsString(yaml)
如果您需要自己的自定義序列化
在幕后,Groovy 的 YamlBuilder 正在使用 Jackson 的 JSON 到 YAML 轉換器。
Jackson 的轉換器確實支持文字塊樣式,但這需要啟用。 當前版本的 YamlBuilder 不支持設置選項。
我復制了 YamlBuilder 類和相關的 YamlConverter 類,以便我可以修改設置。
在 YamlBuilder 類中,我修改了這個方法:
public static String convertJsonToYaml(Reader jsonReader) {
try (Reader reader = jsonReader) {
JsonNode json = new ObjectMapper().readTree(reader);
return new YAMLMapper().writeValueAsString(json);
} catch (IOException e) {
throw new YamlRuntimeException(e);
}
}
要這樣:
public static String convertJsonToYaml(Reader jsonReader) {
try (Reader reader = jsonReader) {
JsonNode json = new ObjectMapper().readTree(reader);
YAMLMapper mapper = new YAMLMapper()
mapper.configure(YAMLGenerator.Feature.LITERAL_BLOCK_STYLE, true)
return mapper.writeValueAsString(json);
} catch (IOException e) {
throw new YamlRuntimeException(e);
}
}
這讓我可以這樣做:
mapper.configure(YAMLGenerator.Feature.LITERAL_BLOCK_STYLE, true)
這將成功將 YAML 呈現為文字塊:
data: |-
this is
a literal
text value
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.