如何使用Jackson yaml

时间:2018-01-17 15:20:01

标签: java list serialization jackson yaml

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

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

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

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

有没有办法在Jackson中使用设置完成第一个?我知道可以使用SnakeYaml完成,但不想遵循这条路径。

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

serialize(...)方法
jasonGenerator.writeStringField("ArrayList", list_string.toString()).

然而,当我打电话

String yamlString = mapper.writeValueAsString(object_to_serialize)

输出采用

的形式
'[list-element1,list-element2,list-element3...]'

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

2 个答案:

答案 0 :(得分:0)

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",
]

答案 1 :(得分:0)

似乎没有其他解决方案,并且很可能与java-to-yaml序列化的过程有关。表现出相同的行为,不仅在我尝试输出带括号字符的列表时,而且还在包含冒号的字符串中,并且通常看起来每当库解析违反某些条件的字符串时(例如以空格开头,或包括它用于yaml输出的字符),用引号包装它。