【问题标题】:How to print a Java List to a Yaml List in brace ([ ]) format, using Jackson yaml如何使用 Jackson yaml 以大括号 ([ ]) 格式将 Java 列表打印到 Yaml 列表
【发布时间】:2018-01-17 15:20:01
【问题描述】:

我正在尝试找到一种将 Java ArrayLists 打印到 Yaml 列表的方法,格式如下:

[list-element1,list-element2,list-element3...]

但是,我只设法以替代格式将它们打印到 Yaml 列表中:

-list-element1
-list-element2
-list-element3

有没有办法通过杰克逊的设置来完成第一个?我知道可以用 SnakeYaml 完成,但不想走这条路。

如果这个问题的答案是否定的,我还创建了一个自定义序列化程序,它将 Java 列表序列化为所需的格式 ([list-element1,list-element2,list-element3...]) 并将其添加到传递给 serialize(...)方法通过调用

jasonGenerator.writeStringField("ArrayList", list_string.toString()).

但是,当我打电话时

String yamlString = mapper.writeValueAsString(object_to_serialize)

输出格式为

'[list-element1,list-element2,list-element3...]'

(带引号),即使在相应的 YAMLFactory 中启用了最小化引号。 除了解析 yamlString 并替换有问题的字符之外,还有其他解决方案吗?

【问题讨论】:

    标签: java list serialization jackson yaml


    【解决方案1】:

    YAMLGenerator.Feature.CANONICAL_OUTPUT 可能会帮助你:

    YAMLFactory yf = new YAMLFactory();
    yf.enable(YAMLGenerator.Feature.CANONICAL_OUTPUT);
    ObjectMapper mapper = new ObjectMapper(yf);
    System.out.println(mapper.writeValueAsString(Arrays.asList(1,3,5)));
    

    它将产生:

    ---
    [
      "1",
      "3",
      "5",
    ]
    

    【讨论】:

    • 非常感谢您花时间回答安东!它接近我想要的,但不完全是。你看,输出中仍然会产生引号(YAMLGenerator.Feature.MINIMIZE_QUOTES 在这种情况下会有所帮助,但是如果要写入的元素不是 1,3,5 而是 "TestElement1","TestElement2","TestElement3" 怎么办) .如果整个结果在一行中也会更好。规范输出在任务的其他情况下也被证明是有问题的 - 但无论如何感谢!
    【解决方案2】:

    好像没有其他解决办法,很有可能是java-to-yaml序列化的过程。不仅当我尝试输出带有大括号字符的列表时,而且在包含冒号的字符串中也表现出相同的行为,而且一般来说,每当库解析违反某些条件的字符串时(例如以空格开头,或包含它用于 yaml 输出的字符),它用引号括起来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-20
      • 2016-10-10
      • 2019-03-12
      • 2012-01-12
      • 2019-03-17
      • 2015-10-04
      • 1970-01-01
      相关资源
      最近更新 更多