Array Multi-Garis YAML

150

Di YAML , Anda dapat dengan mudah membuat string multi-baris . Namun, saya ingin kemampuan untuk membuat array multi-baris (terutama untuk readibility dalam file konfigurasi) menggunakan |karakter tersebut.

Sebuah YAML array yang dapat direpresentasikan sebagai: ['key1', 'key2', 'key3'].

Urutan YAML menggunakan tanda hubung diikuti dengan spasi dan kemudian string:

- String1
- String2
- String3

Hal ini akan mengevaluasi ke: ['string1', 'string2', 'string3'].

Pemetaan YAML adalah larik pasangan kunci dan nilai yang kita lihat sepanjang waktu di YAML:

Key1: string1
Key2: string2
Key3: string3

Ini semua baik dan bagus, tetapi saya tidak bisa seumur hidup saya melihat bagaimana melakukan array multi-baris. Sesuatu seperti ini:

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

Pendeknya membuat beberapa pemetaan array di YAML dan menggabungkannya dalam bahasa pemrograman pilihan saya, adakah cara untuk mencapai array multi-baris, mungkin dengan { }seperti yang dimiliki Python tetapi di YAML?

Jimbo
sumber
sejujurnya, apa itu larik multi-baris & kapan harus bermakna sama sekali? Daripada hanya tampilan kode Anda
OK999
Harus menggulir melintasi layar secara horizontal untuk melihat semua opsi daripada melihat semuanya di satu layar sekaligus.
Jimbo

Jawaban:

266

Sebuah YAML urut adalah sebuah array yang . Jadi inilah cara yang tepat untuk mengungkapkannya:

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

Itu identik artinya dengan:

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

Ini juga legal untuk membagi larik baris tunggal menjadi beberapa baris:

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

dan bahkan memiliki string multi-baris dalam array baris tunggal:

key: ['string1', 'long
  string', 'string3', 'string4', 'string5', 'string6']
Steve Bennett
sumber
1
apakah menjadi masalah jika string diawali dengan - (misalnya, opsi yang dilewatkan pada baris perintah)? apakah saya harus mengutip? `-" -myarg "`?
ekkis
2
Itu sepenuhnya bergantung pada program apa pun yang Anda gunakan untuk mengurai YAML. Pertanyaan ini hanya tentang spesifikasi YAML.
Steve Bennett
44

sudahkah kamu mencoba ini?

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

Saya mendapatkan ini: [{"name"=>"Jack", "age"=>32}, {"name"=>"Claudia", "age"=>25}](Saya menggunakan YAMLkelas Ruby).

Iwan B.
sumber
6

Berikut ini akan berhasil:

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

Saya mengujinya menggunakan implementasi snakeyaml, saya tidak yakin tentang implementasi lain.

Yee
sumber
2
Ini bekerja dengan Puppet Enterprise 3.7 hiera yaml (Ruby yaml) satu hal yang saya temukan ruby ​​yaml cukup sensitif juga adalah identifikasi, dan hindari menggunakan tab. jadi contoh di atas harus seperti dalam dua baris yang diidentifikasi jumlah spasi yang sama di mana baris pertama myarray: [String1, String2, String3,dan baris kedua adalah `String4, String5, String5, String7]`
Walid
2

Mengikuti Berfungsi untuk saya dan kebaikannya dari sudut pandang keterbacaan ketika nilai elemen array kecil:

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

Catatan: implementasi snakeyaml digunakan

Harsimranjit Singh Kler
sumber
0

Jika yang Anda butuhkan adalah array array, Anda dapat melakukannya dengan cara ini:

key:
  - [ 'value11', 'value12', 'value13' ]
  - [ 'value21', 'value22', 'value23' ]
Vinicius
sumber
Terima kasih Vinicius, tetapi pertanyaannya secara eksplisit menyatakan: ". Saya ingin kemampuan untuk membuat array multi-baris", bukan banyak baris dari beberapa array.
Jimbo