YAML中多行字符串的配置方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了YAML中多行字符串的配置方法相关的知识,希望对你有一定的参考价值。
参考技术A有时候我们会在配置文件中配置一段文字说明,这种时候通常会出现两种需求:
简单的说,就是:
假设,我们需要配置这样一段文字:
下面,就针对上面的两种情况来看看可以怎么来实现:
这个需求下,我们希望配置和显示都按句子换行,就是这样:
这样写:
最终输出:
通过 \\n 在显示的时候换行,通过配置行末的 \\ 让这个字符串换行继续写(这个必须有,如果没有第二行行首会多一个空格)。
注意 :这里必须使用双引号来定义字符串,不能用单引号。因为单引号是不支持 \\n 换行的。
在方法一种,其实我们在文字中加入了几个转义符号,其实对于阅读并不方便。在方法二中,将介绍更适合阅读的几种形式:
如上面一共有三种配置都会自动按配置中所写的换行来换行,但是在文末会有一些区别,有的会增加一个空行,有的不会,有的会新增两个空行,具体说明如下:
这个需求下,我们希望配置里是按行写的,但是显示是如下面这样在一行的:
最粗暴的写法,反正不用换行,那就直接写了:
这里不论用双引号还是单引号都是可以的。因为不存在需要转移的内容,所以总体还算清晰。
比较好的表述方式就是使用 > 、 >+ 、 >- 来定义,比如下面这几种:
这三种都不会对配置中的换行进行实际换行,但是依然在文末的处理会有一些小区别,具体如下:
YAML 多行数组
【中文标题】YAML 多行数组【英文标题】:YAML Multi-Line Arrays 【发布时间】:2014-07-02 15:39:06 【问题描述】:在YAML,您可以轻松创建multi-line strings。但是,我希望能够使用 |
字符创建一个多行数组(主要是为了在配置文件中的可读性)。
一个 YAML array 可以表示为:['key1', 'key2', 'key3']
。
YAML sequence 使用破折号,后跟空格,然后是字符串:
- String1
- String2
- String3
这将评估为:['string1', 'string2', 'string3']
。
YAML 映射是我们在 YAML 中经常看到的键值对数组:
Key1: string1
Key2: string2
Key3: string3
这一切都很好,但我一生都看不到如何做一个多行数组。像这样的:
|
['string1', 'string2', 'string3']
['string4', 'string5', 'string6']
没有在 YAML 中创建多个数组映射并在我选择的编程语言中合并它们,有没有办法实现多行数组,也许像 Python 那样使用
但在 YAML 中?
【问题讨论】:
老实说,什么是多行数组&什么时候才有意义?而不仅仅是代码的外观 必须水平滚动屏幕才能看到所有选项,而不是一次在一个屏幕上看到它们。 多行可能使差异更具可读性,因为添加或删除的每个项目都对应于添加或删除的 1 行。 @XedinUnknown 良好的技术论证和推理 - 版本控制使用受未来变化的影响较小。感谢分享。 【参考方案1】:当数组元素值的数量很少时,以下内容对我有用,并且从可读性的角度来看它很好:
key: [string1, string2, string3, string4, string5, string6]
已经过测试,可以与 snakeyaml
和 ruamel.yaml
一起使用。
【讨论】:
【参考方案2】:如果你需要的是一个数组数组,你可以这样做:
key:
- [ 'value11', 'value12', 'value13' ]
- [ 'value21', 'value22', 'value23' ]
【讨论】:
感谢 Vinicius,但问题明确指出:“。我希望能够创建多行数组”,而不是多行多个数组。 没有意识到这个问题并不完全是我的问题,而是为此而来 - 谢谢@Vinicius【参考方案3】:你试过了吗?
-
name: Jack
age: 32
-
name: Claudia
age: 25
我明白了:["name"=>"Jack", "age"=>32, "name"=>"Claudia", "age"=>25]
(我使用 YAML
Ruby 类)。
【讨论】:
【参考方案4】:一个 YAML 序列 是一个数组。所以这是正确的表达方式:
key:
- string1
- string2
- string3
- string4
- string5
- string6
含义相同:
key: ['string1', 'string2', 'string3', 'string4', 'string5', 'string6']
将单行数组拆分为多行也是合法的:
key: ['string1', 'string2', 'string3',
'string4', 'string5',
'string6']
甚至在单行数组中有多行字符串:
key: ['string1', 'long
string', 'string3', 'string4', 'string5', 'string6']
【讨论】:
如果字符串以 - 开头(例如在命令行中传递的选项)是否会出现问题?然后我必须报价吗? ` - “-myarg”`? 这完全取决于您用来解析 YAML 的任何程序。这个问题只是关于 YAML 规范。 我不知道 YAML 可以处理这样的括号。谢谢你:-)【参考方案5】:以下方法可行:
myarray: [
String1, String2, String3,
String4, String5, String5, String7
]
我使用snakeyaml 实现对其进行了测试,但我不确定其他实现。
【讨论】:
它与 Puppet Enterprise 3.7 hiera yaml (Ruby yaml) 一起工作我发现 ruby yaml 也非常敏感的一件事是识别,避免使用制表符。所以上面的例子应该像两行一样,有相同数量的空格,第一行是myarray: [String1, String2, String3,
,第二行是`String4,String5,String5,String7]`以上是关于YAML中多行字符串的配置方法的主要内容,如果未能解决你的问题,请参考以下文章
从yaml文件读取配置,然后修改配置,怎样更新到yaml文件
spring配置文件(application.propertiesapplication.ymlapplication.yaml))中的配置项加载到自定义类中的方法