2016-06-20 3 views
5

Это очень конкретный вопрос, но оставил меня в тупике. Мы рассматриваем вложенные ключи + регулярные массивы почти то же самое на разборе - иногда добавляя дополнительную информацию, когда это необходимо, например:Многострочные строки YAML: ключи против значений массива

--- 
Entry 1: 
    - lorem: 
     true 
    - ipsum 
    - dolor 
Entry 2: 
    - lorem 
    - ipsum: 
     true 
    - dolor 
... 

... что дает мне этот JSON:

{ 
    "Entry 2": [ 
    "lorem", 
    { 
     "ipsum": true 
    }, 
    "dolor" 
    ], 
    "Entry 1": [ 
    { 
     "lorem": true 
    }, 
    "ipsum", 
    "dolor" 
    ] 
} 

Все круто и хорошо. Ввод многострочных строк контента становится хаотичным, но по-прежнему работает нормально, как это (держать вставив тех Online YAML Parser или какой-либо другой компилятор для справки):

--- 
#works: 

Test: 
    - lorem 
    - ipsum 
    - dolor 
? |- 
    multiline 
    Test 
: 
    - lorem 
    - ipsum: 
     true 
    - dolor 
... 

глубже, многострочные строки в моей работе массива второго уровня, а также, как и ожидаемый по спецификации:

--- 
#works: 
Test: 
    - |- 
     multiline 
     lorem 
    - ipsum 
    - dolor 
? |- 
    multiline 
    Test 
: 
    - lorem 
    - ipsum: 
     true 
    - dolor 
... 

Wohoo! Но как только я смесь ключей многострочных и строка массива многострочных на тот же уровень, мои настройки перерывы:

--- 
#breaks: 
Test: 
    - |- 
     multiline 
     lorem 
    ? |- 
     multiline 
     ipsum 
    : 
     true 
? |- 
    multiline 
    Test 
: 
    - lorem 
    - ipsum: 
     true 
    - dolor 
... 

Как исправить это?

ответ

7

YAML ломается, если вы смешиваете клавиши и элементы массива на одном уровне. Для этого вам не нужны многострочные строки:

- 1 
? 2 
: 3 

Для чего этот синтаксический разбор? Массив? Отображение? Это, однако, работает:

- 1 
- ? 2 
    : 3 

Таким образом, вы можете исправить YAML так:

--- 
Test: 
    - |- 
     multiline 
     lorem 
    - ? |- 
      multiline 
      ipsum 
     : 
     true 
? |- 
    multiline 
    Test 
: 
    - lorem 
    - ipsum: 
     true 
    - dolor 
... 
+0

Большое спасибо за обучение меня по этому вопросу! – Paracetamol

Смежные вопросы