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?

Jimbo
fuente
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']
Steve Bennett
fuente
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).

Iwan B.
fuente
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.

Yee
fuente
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

Harsimranjit Singh Kler
fuente
0

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

key:
  - [ 'value11', 'value12', 'value13' ]
  - [ 'value21', 'value22', 'value23' ]
Vinicius
fuente
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