Существует 5 6 NINE (или 63 *, в зависимости от того, как вы считаете) писать многострочные строки в YAML.
TL; DR
Обычно вы хотите >
:
key: >
Your long
string here.
Если вы хотите, чтобы разрывы строк сохранялись как \n
в строке (например, встроенная уценка с абзацами), используйте |
.
key: |
### Heading
* Bullet
* Points
Используйте вместо этого >-
или |-
, если вы не хотите, чтобы в конце добавлялся перенос строки.
Если вам нужно разбить строки в середине слов или буквально ввести разрывы строк как \n
, используйте вместо этого двойные кавычки:
key: "Antidisestab\
lishmentarianism.\n\nGet on it."
ЯМЛ сумасшедший.
Блочные скалярные стили (>
, |
)
Они позволяют символы, такие как \
и "
без экранирования, и добавляют новую строку (\n
) в конец вашей строки.
>
Сложенный стиль удаляет одиночные новые строки в строке (но добавляет один в конце и преобразует двойные новые строки в одиночные):
Key: >
this is my very very very
long string
→ this is my very very very long string\n
|
Литеральный стиль превращает каждую новую строку в строке в буквальную новую строку и добавляет один в конце:
Key: |
this is my very very very
long string
→ this is my very very very\nlong string\n
Вот официальное определение из YAML Spec 1.2
Скалярное содержимое может быть записано в блочной нотации, используя буквальный стиль (обозначенный «|»), где все разрывы строк являются значительными. В качестве альтернативы они могут быть записаны в сложенном стиле (обозначаемом «>»), где каждый разрыв строки свернут в пробел, если он не заканчивается пустой или более отступой строкой.
Стили блоков с индикатором чипирования блоков (>-
, |-
, >+
, |+
)
Вы можете управлять обработкой последней новой строки в строке и любых завершающих пустых строк (\n\n
), добавив индикатор выделения блоков символ:
>
, |
: "clip": сохранить перевод строки, удалить завершающие пустые строки.
>-
, |-
: «полоса»: убрать перевод строки, убрать завершающие пустые строки.
>+
, |+
: "keep": сохранить перевод строки, оставить после себя пустые строки.
Скалярные стили "Flow" (
, "
, '
)
Они имеют ограниченный выход и создают однострочную строку без символов новой строки. Они могут начинаться с той же строки, что и ключ, или сначала с новых строк.
простой стиль (без экранирования, без комбинаций #
или :
, ограничения по первому символу):
Key: this is my very very very
long string
стиль в двойных кавычках (\
и "
должны быть экранированы \
, символы новой строки могут вставляться с буквенной последовательностью \n
, строки могут быть объединены без пробелов с конечным знаком \
):
Key: "this is my very very \"very\" loooo\
ng string.\n\nLove, YAML."
& rarr; "this is my very very \"very\" loooong string.\n\nLove, YAML."
стиль в одинарных кавычках (литерал '
должен быть удвоен, без специальных символов, возможно, полезно для выражения строк, начинающихся с двойных кавычек):
Key: 'this is my very very "very"
long string, isn''t it.'
& rarr; "this is my very very \"very\" long string, isn't it."
Краткое описание
В этой таблице _
означает space character
. \n
означает «символ новой строки» (\n
в JavaScript), за исключением строки «встроенные символы новой строки», где это означает буквально обратную косую черту и n).
> | " ' >- >+ |- |+
-------------------------|------|-----|-----|-----|------|------|------|------
Trailing spaces | Kept | Kept | | | | Kept | Kept | Kept | Kept
Single newline => | _ | \n | _ | _ | _ | _ | _ | \n | \n
Double newline => | \n | \n\n | \n | \n | \n | \n | \n | \n\n | \n\n
Final newline => | \n | \n | | | | | \n | | \n
Final dbl nl's => | | | | | | | Kept | | Kept
In-line newlines | No | No | No | \n | No | No | No | No | No
Spaceless newlines| No | No | No | \ | No | No | No | No | No
Single quote | ' | ' | ' | ' | '' | ' | ' | ' | '
Double quote | " | " | " | \" | " | " | " | " | "
Backslash | \ | \ | \ | \\ | \ | \ | \ | \ | \
" #", ": " | Ok | Ok | No | Ok | Ok | Ok | Ok | Ok | Ok
Can start on same | No | No | Yes | Yes | Yes | No | No | No | No
line as key |
Примеры * +1161 *
Запишите пробелы в конце строки перед "пробелами".
- >
very "long"
'string' with
paragraph gap, \n and
spaces.
- |
very "long"
'string' with
paragraph gap, \n and
spaces.
- very "long"
'string' with
paragraph gap, \n and
spaces.
- "very \"long\"
'string' with
paragraph gap, \n and
s\
p\
a\
c\
e\
s."
- 'very "long"
''string'' with
paragraph gap, \n and
spaces.'
- >-
very "long"
'string' with
paragraph gap, \n and
spaces.
[
"very \"long\" 'string' with\nparagraph gap, \\n and spaces.\n",
"very \"long\"\n'string' with\n\nparagraph gap, \\n and \nspaces.\n",
"very \"long\" 'string' with\nparagraph gap, \\n and spaces.",
"very \"long\" 'string' with\nparagraph gap, \n and spaces.",
"very \"long\" 'string' with\nparagraph gap, \\n and spaces.",
"very \"long\" 'string' with\nparagraph gap, \\n and spaces."
]
Стили блоков с индикаторами отступа
На всякий случай, если вам недостаточно вышеприведенного, вы можете добавить « индикатор отступа блока » (после индикатора блокировки блока, если он у вас есть):
- >8
My long string
starts over here
- |+1
This one
starts here
Добавление
Если вы вставите лишние пробелы в начале не первых строк в сложенном стиле, они будут сохранены с бонусной новой строкой. Этого не происходит со стилями потока:
- >
my long
string
- my long
string
→ ["my long\n string\n", "my long string"]
Не могу даже.
*
2 стилевых блока, каждый с 2-мя возможными индикаторами сочетания блоков (или без) и с 9-ю возможными индикаторами отступа (или без), 1 простой стиль и 2 указанных стиля: 2 x (2 + 1) x (9 + 1)+ 1 + 2 = 63 Часть этой информации также была обобщена здесь .