YAML多线阵列


140

YAML中,您可以轻松创建多行字符串。但是,我希望能够使用|字符创建多行数组(主要是为了在配置文件中提高可读性)。

YAML 数组可以表示为:['key1', 'key2', 'key3']

YAML 序列使用破折号,空格和字符串:

- String1
- String2
- String3

评估结果为:['string1', 'string2', 'string3']

YAML 映射是我们一直在YAML中看到的键和值对的数组:

Key1: string1
Key2: string2
Key3: string3

这一切都很好,但是我一生都看不到如何做多行阵列。像这样:

|
['string1', 'string2', 'string3']
['string4', 'string5', 'string6']

缺少在YAML中创建多个数组映射并将其与我选择的编程语言合并的方法,是否有任何方法可以实现多行数组,也许{ }像在YAML中使用Python一样?


老实说,什么是多行数组?什么时候才有意义?不仅仅是代码的外观
OK999,2017年

必须水平滚动屏幕才能查看所有选项,而不必一次看到一个屏幕。
Jimbo

Answers:


240

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']

1
如果字符串以-开头(例如,在命令行中传递的选项),是否有问题?然后我必须报价吗?`-“ -myarg”`?
ekkis

2
这完全取决于您用来解析YAML的程序。这个问题与YAML规范有关。
史蒂夫·本内特

39

你尝试过这个吗?

-
  name: Jack
  age: 32
-
  name: Claudia
  age: 25

我明白了:([{"name"=>"Jack", "age"=>32}, {"name"=>"Claudia", "age"=>25}]我使用YAMLRuby类)。


6

以下将起作用:

myarray: [
  String1, String2, String3,
  String4, String5, String5, String7
]

我使用snakeyaml实现对其进行了测试,但是我不确定其他实现。


2
它与Puppet Enterprise 3.7 hiera yaml(Ruby yaml)一起使用时,我发现红宝石yaml也是非常敏感的,它的标识也很重要,避免使用制表符。因此,上面的示例应该像在两行中标识了相同的空格数,其中第一行是myarray: [String1, String2, String3,第二行是`String4,String5,String5,String7]`
Walid

2

当数组元素的值较小时,从可读性的角度来看,以下Works对我有用,并且对我有好处:

key: [string1, string2, string3, string4, string5, string6]

注意:使用snakeyaml实现


0

如果您需要的是数组数组,则可以采用以下方式:

key:
  - [ 'value11', 'value12', 'value13' ]
  - [ 'value21', 'value22', 'value23' ]

感谢Vinicius,但问题明确指出:“。我希望能够创建多行数组”,而不是多个数组的多行。
Jimbo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.