Багаторядкові масиви YAML


140

У YAML ви можете легко створювати багаторядкові рядки . Однак я хотів би можливість створити багаторядковий масив (в основному для читальності в файлах конфігурацій) за допомогою |символу.

YAML масив може бути представлений в вигляді: ['key1', 'key2', 'key3'].

YAML послідовність використовує тир , а потім пробіл , а потім рядок:

- String1
- String2
- String3

Це буде обчислюватися: ['string1', 'string2', 'string3'].

YAML відображення являє собою масив ключів і значень пара , які ми бачимо весь час в YAML:

Key1: string1
Key2: string2
Key3: string3

Це все добре і добре, але я не можу протягом життя бачити, як зробити багаторядковий масив. Щось на зразок цього:

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

Окрім створення декількох відображень масивів у YAML та об'єднання їх у мою програмування на вибір, чи є спосіб досягти багаторядкових масивів, можливо, { }як у Python, але в YAML?


чесно кажучи, що таке багаторядковий масив, і коли він взагалі повинен мати значення? Замість того, щоб виглядати лише ваш код
OK999

Потрібно прокручувати по екрану горизонтально, щоб побачити всі параметри, а не бачити їх один один екран відразу.
Джимбо

Відповіді:


241

YAML послідовність є масивом . Це правильний спосіб висловити це:

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

Це ідентично за значенням:

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

Також законно ділити однорядковий масив на кілька рядків:

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

і навіть мають багаторядкові рядки в однорядкових масивах:

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

1
це питання, якщо рядки починаються з - (наприклад, параметри, передані в командному рядку)? я тоді повинен цитувати? `-" -ярг "`?
ekkis

2
Це повністю залежить від програми, яку ви використовуєте для розбору YAML. Це питання стосується специфікації YAML.
Стів Беннетт

39

ви пробували це?

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

Я отримую це: [{"name"=>"Jack", "age"=>32}, {"name"=>"Claudia", "age"=>25}](Я використовую YAMLклас Ruby).


6

Працює таке:

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

Я тестував це за допомогою реалізації snakeyaml, але я не впевнений в інших реалізаціях.


2
він працював з Puppet Enterprise 3.7 hiera yaml (Ruby yaml). Одне, я вважаю, рубін ямл є досить чутливим - це ідентифікація, і уникати використання вкладок. тому приклад вище повинен бути, як у двох рядках, закреслених однаковою кількістю пробілів, де перший рядок, myarray: [String1, String2, String3,а другий рядок `String4, String5, String5, String7]`
Валід

2

Наступні роботи для мене та її користь з точки зору читабельності, коли значення елементів масиву невеликі:

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

Примітка: застосовується реалізація snakeyaml


0

Якщо вам потрібен масив масивів, ви можете зробити так:

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

Дякую Вініцію, але в питанні прямо сказано: ". Я хотів би можливість створити багаторядковий масив", а не кілька рядків з декількох масивів.
Джимбо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.