ChatGPT解决这个技术问题 Extra ChatGPT

YAML 多行数组

YAML 中,您可以轻松创建 multi-line strings。但是,我希望能够使用 | 字符创建一个多行数组(主要是为了配置文件中的可读性)。

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 中创建多个数组映射并将它们合并到我选择的编程语言中之外,有没有办法实现多行数组,也许像 Python 那样使用 { } 但在 YAML 中?

老实说,什么是多行数组,什么时候才有意义?而不仅仅是代码的外观
必须水平滚动屏幕才能看到所有选项,而不是一次在一个屏幕上看到它们。
多行可能会使差异更具可读性,因为添加或删除的每个项目都对应于添加或删除的 1 行。
@XedinUnknown 良好的技术论据和推理 - 版本控制使用受未来变化的影响较小。感谢分享。

S
Steve Bennett

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 可以处理这样的括号。谢谢你 :-)
I
Iwan B.

你试过这个吗?

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

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


Y
Yee

以下将起作用:

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]`
V
Vinicius

如果你需要的是一个数组数组,你可以这样做:

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

谢谢Vinicius,但问题明确指出:“。我希望能够创建多行数组”,而不是多行多个数组。
没有意识到这个问题不完全是我的问题,而是为此而来 - 谢谢@Vinicius
A
Asclepius

当数组元素值的数量很少时,以下内容对我有用,并且从可读性的角度来看它很好:

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

这已经过测试,可以与 snakeyamlruamel.yaml 一起使用。