Matrizes de várias linhas YAML

140

No YAML , você pode criar facilmente seqüências de várias linhas . No entanto, eu gostaria da capacidade de criar uma matriz de várias linhas (principalmente para facilitar a leitura nos arquivos de configuração) usando o |caractere.

Um YAML matriz pode ser representada como: ['key1', 'key2', 'key3'].

Uma sequência YAML usa um traço seguido por um espaço e, em seguida, uma sequência:

- String1
- String2
- String3

Este seria avaliada como: ['string1', 'string2', 'string3'].

Um mapeamento YAML é uma matriz de pares de chave e valor que vemos o tempo todo no YAML:

Key1: string1
Key2: string2
Key3: string3

Tudo está bem, mas pela minha vida não consigo ver como fazer uma matriz de várias linhas. Algo assim:

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

Com falta de criar vários mapeamentos de matriz no YAML e mesclá-los na minha linguagem de programação de escolha, existe alguma maneira de obter matrizes de várias linhas, talvez com o { }Python como o YAML?

Jimbo
fonte
Sinceramente, o que é uma matriz de várias linhas e quando deve ser significativa? Em vez de apenas a aparência do seu código
OK999 22/10
É preciso rolar a tela horizontalmente para ver todas as opções, em vez de vê-las todas em uma única tela ao mesmo tempo.
Jimbo

Respostas:

241

Uma sequência YAML é uma matriz . Portanto, este é o caminho certo para expressá-lo:

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

O significado é idêntico a:

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

Também é legal dividir uma matriz de linha única em várias linhas:

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

e ainda possui seqüências de várias linhas em matrizes de linha única:

key: ['string1', 'long
  string', 'string3', 'string4', 'string5', 'string6']
Steve Bennett
fonte
1
é um problema se as strings começam com um - (por exemplo, opções passadas na linha de comando)? então eu tenho que citar? `-" -myarg "`?
ekkis
2
Isso depende totalmente de qualquer programa que você esteja usando para analisar o YAML. Esta pergunta é apenas sobre a especificação YAML.
21817 Steve Bennett
39

você já tentou isso?

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

Eu recebo o seguinte: [{"name"=>"Jack", "age"=>32}, {"name"=>"Claudia", "age"=>25}](eu uso a YAMLclasse Ruby).

Iwan B.
fonte
6

O seguinte funcionaria:

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

Eu testei usando a implementação snakeyaml, mas não tenho certeza sobre outras implementações.

Yee
fonte
2
funcionou com o Puppet Enterprise 3.7 hiera yaml (Ruby yaml) uma coisa que acho que o ruby ​​yaml também é bastante sensível é a identificação e evite usar guias. Assim, o exemplo acima deve ser como em duas linhas identificadas o mesmo número de espaços em que a primeira linha é myarray: [String1, String2, String3,e a segunda linha é `String4, String5, String5, String7]`
Walid
2

O seguinte funciona para mim e é bom do ponto de vista da legibilidade quando os valores dos elementos da matriz são pequenos:

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

Nota: Implementação snakeyaml usada

Harsimranjit Singh Kler
fonte
0

Se o que você precisa é de uma matriz de matrizes, você pode fazer o seguinte:

key:
  - [ 'value11', 'value12', 'value13' ]
  - [ 'value21', 'value22', 'value23' ]
Vinicius
fonte
Obrigado Vinicius, mas a pergunta declarou explicitamente: ". Gostaria da capacidade de criar uma matriz de várias linhas", não de várias linhas de várias matrizes.
Jimbo