Matrices multilínea YAML


140

En YAML , puede crear fácilmente cadenas de varias líneas . Sin embargo, me gustaría la posibilidad de crear una matriz de varias líneas (principalmente para la lectura dentro de los archivos de configuración) utilizando el |carácter.

A YAML array se puede representar como: ['key1', 'key2', 'key3'].

Una secuencia YAML usa un guión seguido de un espacio y luego una cadena:

- String1
- String2
- String3

Este evaluaría a: ['string1', 'string2', 'string3'].

Un mapeo YAML es una matriz de pares clave y valor que vemos todo el tiempo en YAML:

Key1: string1
Key2: string2
Key3: string3

Todo esto está muy bien, pero por mi vida no puedo ver cómo hacer una matriz de varias líneas. Algo como esto:

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

A falta de crear múltiples asignaciones de matriz en YAML y fusionarlas en mi lenguaje de programación de elección, ¿hay alguna forma de lograr matrices de varias líneas, tal vez con { }Python como en YAML?


honestamente, ¿cuál es una matriz de varias líneas y cuándo debería ser significativa? En lugar de solo el aspecto de su código
— OK999

Tener que desplazarse horizontalmente por la pantalla para ver todas las opciones en lugar de verlas todas una pantalla a la vez.
— Jimbo

Respuestas:


241

Una secuencia YAML es una matriz . Entonces esta es la forma correcta de expresarlo:

key:
  - string1
  - string2      
  - string3
  - string4
  - string5
  - string6

Eso es idéntico en significado a:

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

También es legal dividir una matriz de una sola línea en varias líneas:

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

e incluso tienen cadenas de varias líneas en matrices de una sola línea:

key: ['string1', 'long
  string', 'string3', 'string4', 'string5', 'string6']

1
¿Es un problema si las cadenas comienzan con un - (por ejemplo, las opciones pasadas en la línea de comando)? ¿Entonces tengo que citar? `-" -myarg "`?
— ekkis

2
Eso depende totalmente de cualquier programa que esté utilizando para analizar YAML. Esta pregunta es solo sobre la especificación YAML.
— Steve Bennett

39

has intentado esto?

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

Me sale esto: [{"name"=>"Jack", "age"=>32}, {"name"=>"Claudia", "age"=>25}](uso la YAMLclase Ruby).


6

Lo siguiente funcionaría:

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

Lo probé usando la implementación snakeyaml, aunque no estoy seguro de otras implementaciones.


2
funcionó con Puppet Enterprise 3.7 hiera yaml (Ruby yaml) una cosa que encuentro que ruby ​​yaml también es bastante sensible es la ideación, y evito usar pestañas. así que el ejemplo anterior debería ser como en dos líneas con el mismo número de espacios donde la primera línea es myarray: [String1, String2, String3,y la segunda línea es `String4, String5, String5, String7]`
— Walid

2

Seguir Works para mí y es bueno desde el punto de vista de legibilidad cuando los valores de los elementos de la matriz son pequeños:

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

Nota: implementación de snakeyaml utilizada


0

Si lo que necesita es una matriz de matrices, puede hacerlo de esta manera:

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

Gracias Vinicius, pero la pregunta explícitamente decía: "Me gustaría la capacidad de crear una matriz de varias líneas", no varias líneas de varias.
— Jimbo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.