Mảng đa dòng YAML


140

Trong YAML , bạn có thể dễ dàng tạo các chuỗi nhiều dòng . Tuy nhiên, tôi muốn khả năng tạo một mảng nhiều dòng (chủ yếu để dễ đọc trong các tệp cấu hình) bằng cách sử dụng |ký tự.

Một mảng YAML có thể được biểu diễn dưới dạng : ['key1', 'key2', 'key3'].

Chuỗi YAML sử dụng dấu gạch ngang theo sau là khoảng trắng và sau đó là chuỗi:

- String1
- String2
- String3

Điều này sẽ đánh giá để : ['string1', 'string2', 'string3'].

Ánh xạ YAML là một mảng các cặp khóa và giá trị mà chúng ta thấy mọi lúc trong YAML:

Key1: string1
Key2: string2
Key3: string3

Đây là tất cả tốt và tốt, nhưng trong đời tôi không thể thấy cách thực hiện một mảng nhiều dòng. Một cái gì đó như thế này:

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

Không tạo ra nhiều ánh xạ mảng trong YAML và hợp nhất chúng trong ngôn ngữ lập trình mà tôi chọn, có cách nào để đạt được các mảng nhiều dòng, có thể { }giống như Python có nhưng trong YAML không?


Thành thật mà nói, một mảng nhiều dòng là gì và khi nào nó nên có ý nghĩa? Thay vì chỉ là vẻ ngoài của mã của bạn
OK999

Phải cuộn trên màn hình theo chiều ngang để xem tất cả các tùy chọn thay vì nhìn thấy tất cả một màn hình cùng một lúc.
Jimbo

Câu trả lời:


240

Một chuỗi YAML một mảng . Vì vậy, đây là cách đúng để thể hiện nó:

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

Điều đó giống hệt nhau về nghĩa:

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

Việc chia một mảng một dòng thành nhiều dòng là hợp pháp:

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

và thậm chí có các chuỗi nhiều dòng trong mảng đơn dòng:

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

1
có vấn đề gì không nếu các chuỗi bắt đầu bằng một - (ví dụ: các tùy chọn được truyền trong dòng lệnh)? sau đó tôi có phải trích dẫn không? `-" -myarg "`?
ekkis

2
Điều đó phụ thuộc hoàn toàn vào bất kỳ chương trình nào bạn đang sử dụng để phân tích YAML. Câu hỏi này chỉ là về đặc điểm kỹ thuật YAML.
Steve Bennett

39

bạn đã thử cái này chưa

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

Tôi nhận được điều này: [{"name"=>"Jack", "age"=>32}, {"name"=>"Claudia", "age"=>25}](Tôi sử dụng YAMLlớp Ruby).


6

Sau đây sẽ làm việc:

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

Tôi đã thử nghiệm nó bằng cách sử dụng triển khai Snakeyaml, tôi không chắc chắn về các triển khai khác mặc dù.


2
nó hoạt động với Puppet Enterprise 3.7 hiera yaml (Ruby yaml) một điều tôi thấy ruby ​​yaml khá nhạy cảm là nhận dạng và tránh sử dụng các tab. vì vậy, ví dụ ở trên phải giống như trong hai dòng được xác định cùng một số khoảng trắng trong đó dòng myarray: [String1, String2, String3,thứ nhất và dòng thứ hai là `String4, String5, String5, String7]`
Walid

2

Theo dõi Hoạt động cho tôi và lợi ích của nó từ quan điểm dễ đọc khi các giá trị phần tử mảng nhỏ:

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

Lưu ý: thực hiện Snakeyaml


0

Nếu những gì bạn cần là một mảng các mảng, bạn có thể làm theo cách này:

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

Cảm ơn Vinicius, nhưng câu hỏi đã nêu rõ: ". Tôi muốn khả năng tạo ra một mảng nhiều dòng", chứ không phải nhiều dòng của nhiều mảng.
Jimbo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.