如何使用SnakeYAML转储嵌套列表

我正在解析这个yaml文件

View: from : 01.01.2007 to : 04.01.2007 driver : sun.jdbc.odbc.JdbcOdbcDriver 

在Scala中使用SnakeYAML是这样的:

 val stream = getClass.getResourceAsStream("/config_view.yml") var configMap: Map[String, Any] = new Yaml().load(stream).asInstanceOf[java.util.Map[String, Any]].asScala var view = configMap("View").asInstanceOf[java.util.LinkedHashMap[String, String]].asScala view = view + ("from" -> "neu") // some test modifying 

我像这样转储它:

 val fileWriter = new FileWriter(System.getProperty("user.home") + "\\Desktop\\test.yml") new Yaml().dump(Map[String, Any]("View" -> view.asJava).asJava, fileWriter) 

这样可以保存新的yaml文件:

 View: {driver: sun.jdbc.odbc.JdbcOdbcDriver, from: neu, to: 04.01.2007} 

但是我想要这样保存它:

 View: driver: sun.jdbc.odbc.JdbcOdbcDriver from: neu to: 04.01.2007 

我如何告诉SnakeYAML将其保存为您所需的格式?

如何手动处理缩进和key: value格式化:

 view.map{ case (k,v) => s"\t$k: $v\n" } 

在嵌套地图的情况下,你会想要一个方法

  • 接受当前嵌套的“级别”。 将level标签放置在输出前面以提供正确的输出嵌套
  • 检查每个条目。 如果它是另一种集合类型,则需要递归地调用它自己 – 这将增加缩进级别

默认情况下,SnakeYAML使用DumperOptions.FlowStyle.FLOW但可以将其更改为DumperOptions.FlowStyle.BLOCK ,它将以所需的格式转储数据。

Kotlin的一个例子是:

 val options = DumperOptions() options.indent = 2 options.defaultFlowStyle = DumperOptions.FlowStyle.BLOCK Yaml(options).dump(yourObject)