YAML Multi-Line Arrays

140

In YAML können Sie problemlos mehrzeilige Zeichenfolgen erstellen . Ich möchte jedoch die Möglichkeit haben, mit dem |Zeichen ein mehrzeiliges Array (hauptsächlich zur besseren Lesbarkeit in Konfigurationsdateien) zu erstellen .

Ein YAML- Array kann wie folgt dargestellt werden : ['key1', 'key2', 'key3'].

Eine YAML- Sequenz verwendet einen Bindestrich, gefolgt von einem Leerzeichen und einer Zeichenfolge:

- String1
- String2
- String3

Dies würde bewerten zu : ['string1', 'string2', 'string3'].

Eine YAML- Zuordnung ist ein Array von Schlüssel- und Wertepaaren, die wir in YAML ständig sehen:

Key1: string1
Key2: string2
Key3: string3

Das ist alles schön und gut, aber ich kann für mein ganzes Leben nicht sehen, wie man ein mehrzeiliges Array macht. Etwas wie das:

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

Gibt es eine Möglichkeit, mehrzeilige Arrays zu erstellen, ohne mehrere Array-Zuordnungen in YAML zu erstellen und in der Programmiersprache Ihrer Wahl zusammenzuführen, vielleicht mit { }Python, aber in YAML?

Jimbo
quelle
Ehrlich gesagt, was ist ein mehrzeiliges Array und wann sollte es überhaupt sinnvoll sein? Anstatt nur das Aussehen Ihres Codes
OK999
Sie müssen horizontal über den Bildschirm scrollen, um alle Optionen anzuzeigen, anstatt sie alle auf einem Bildschirm gleichzeitig anzuzeigen.
Jimbo

Antworten:

240

Eine YAML- Sequenz ist ein Array . Das ist also der richtige Weg, um es auszudrücken:

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

Das hat die gleiche Bedeutung wie:

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

Es ist auch legal, ein einzeiliges Array auf mehrere Zeilen aufzuteilen:

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

und haben sogar mehrzeilige Zeichenfolgen in einzeiligen Arrays:

key: ['string1', 'long
  string', 'string3', 'string4', 'string5', 'string6']
Steve Bennett
quelle
1
Ist es ein Problem, wenn die Zeichenfolgen mit einem - beginnen (z. B. Optionen, die in der Befehlszeile übergeben werden)? muss ich dann zitieren `-" -myarg "`?
Ekkis
2
Das hängt ganz davon ab, mit welchem ​​Programm Sie die YAML analysieren. Diese Frage bezieht sich nur auf die YAML-Spezifikation.
Steve Bennett
39

hast du das versucht

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

Ich bekomme folgendes: [{"name"=>"Jack", "age"=>32}, {"name"=>"Claudia", "age"=>25}](Ich benutze die YAMLRuby-Klasse).

Iwan B.
quelle
6

Folgendes würde funktionieren:

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

Ich habe es mit der Implementierung von snakeyaml getestet, bin mir jedoch bei anderen Implementierungen nicht sicher.

Ja
quelle
2
Es hat mit Puppet Enterprise 3.7 funktioniert. Hiera Yaml (Ruby Yaml) Eine Sache, die Ruby Yaml sehr empfindlich findet, ist auch die Identifizierung. Vermeiden Sie die Verwendung von Tabulatoren. Das obige Beispiel sollte also wie in zwei Zeilen mit der gleichen Anzahl von Leerzeichen sein, wobei die erste Zeile myarray: [String1, String2, String3,und die zweite Zeile "String4, String5, String5, String7]" sind
Walid
2

Das Folgende funktioniert für mich und es ist aus Sicht der Lesbarkeit gut, wenn die Array-Elementwerte klein sind:

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

Hinweis: Snakeyaml-Implementierung verwendet

Harsimranjit Singh Kler
quelle
0

Wenn Sie ein Array von Arrays benötigen, können Sie dies folgendermaßen tun:

key:
  - [ 'value11', 'value12', 'value13' ]
  - [ 'value21', 'value22', 'value23' ]
Vinicius
quelle
Vielen Dank an Vinicius, aber die Frage lautete ausdrücklich: "Ich möchte die Möglichkeit, ein mehrzeiliges Array zu erstellen", nicht mehrere Zeilen mit mehreren Arrays.
Jimbo