Tablice wieloliniowe YAML


140

W YAML możesz łatwo tworzyć ciągi wieloliniowe . Chciałbym jednak mieć możliwość tworzenia wieloliniowej tablicy (głównie dla czytelności w plikach konfiguracyjnych) za pomocą |znaku.

YAML tablica może być przedstawiony jako: ['key1', 'key2', 'key3'].

Sekwencja YAML używa myślnika, po którym następuje spacja, a następnie ciąg:

- String1
- String2
- String3

To będzie oceniać do: ['string1', 'string2', 'string3'].

Mapowanie YAML to tablica par kluczy i wartości, które widzimy cały czas w YAML:

Key1: string1
Key2: string2
Key3: string3

To wszystko jest w porządku, ale do końca życia nie mogę zobaczyć, jak zrobić tablicę wieloliniową. Coś takiego:

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

Oprócz tworzenia wielu mapowań tablic w YAML i scalania ich w wybranym przeze mnie języku programowania, czy istnieje sposób na osiągnięcie tablic wieloliniowych, może z { }podobnymi do Pythona, ale w YAML?


szczerze mówiąc, czym jest tablica wieloliniowa i kiedy w ogóle powinna mieć znaczenie? Zamiast tylko wygląd kodu
OK999

Konieczność przewijania ekranu w poziomie, aby zobaczyć wszystkie opcje, zamiast wyświetlać je wszystkie na jednym ekranie naraz.
Jimbo,

Odpowiedzi:


240

YAML sekwencja jest tablicy . Oto właściwy sposób wyrażenia tego:

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

Ma to identyczne znaczenie jak:

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

Dozwolone jest również dzielenie jednowierszowej tablicy na kilka linii:

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

a nawet mają ciągi wieloliniowe w tablicach jednowierszowych:

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

1
czy jest to problem, jeśli ciągi zaczynają się od - (np. opcje przekazane w wierszu poleceń)? muszę wtedy cytować? `-" -myarg "`?
ekkis

2
To zależy całkowicie od programu, którego używasz do analizowania YAML. To pytanie dotyczy tylko specyfikacji YAML.
Steve Bennett

39

próbowałeś tego?

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

Rozumiem: [{"name"=>"Jack", "age"=>32}, {"name"=>"Claudia", "age"=>25}](używam YAMLklasy Ruby).


6

Działałyby następujące rzeczy:

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

Przetestowałem to za pomocą implementacji snakeyaml, ale nie jestem pewien co do innych implementacji.


2
działało z Puppet Enterprise 3.7 hiera yaml (Ruby yaml) .Jedną rzeczą, którą uważam za ruby ​​yaml, jest dość wrażliwa, to identyfikacja i unikanie używania zakładek. tak powyższym przykładzie powinno być w dwóch liniach idented samą liczbę miejsc, gdzie pierwsza linia myarray: [String1, String2, String3,i druga linia jest 'String4, String5, String5, String7] `
Walid

2

Poniższe działa dla mnie i jest dobre z punktu widzenia czytelności, gdy wartości elementów tablicy są małe:

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

Uwaga: zastosowano implementację snakeyaml


0

Jeśli potrzebujesz tablicy tablic, możesz zrobić w ten sposób:

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

Dziękuję Vinicius, ale pytanie wyraźnie brzmiało: ". Chciałbym mieć możliwość stworzenia tablicy wieloliniowej", a nie wielu linii wielu tablic.
Jimbo
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.