2016-06-20 11 views
5

To jest bardzo specyficzne, ale mnie nachmurzyło. Traktujemy klucze zagnieżdżone + regularne tablice prawie taka sama na parsowanie - czasami dodanie dodatkowych informacji, gdy są potrzebne, tak:Wielowymiarowe łańcuchy YAML: klucze vs wartości tablicowe

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

... co daje mi ten JSON:

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

Wszystko fajne i dobrze. Wprowadzanie multilinii ciągi treści robi Messiera ale nadal działa ok tak (zachować wklejenie tych, Online YAML Parser lub innego kompilatora dla porównania):

--- 
#works: 

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

zagłębiając, multilinii struny w mojej pracy tablicy 2. poziom, a także, jak oczekiwany przez specyfikację:

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

Wohoo! Ale jak tylko mix przycisków multi-line i ciągi tablicy multi-linia na tym samym poziomie, moich przerw Setup:

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

Jak to naprawić?

Odpowiedz

7

YAML ulega przerwaniu, jeśli miksujesz klucze i elementy tablicy na tym samym poziomie. Nie potrzebujesz wielowątkowych łańcuchów do tego:

- 1 
? 2 
: 3 

Do czego to powinno doprowadzić? Tablica? Mapowanie? To jednak działa:

- 1 
- ? 2 
    : 3 

Więc można naprawić YAML tak:

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

Dziękuję bardzo za edukowanie mnie w tej sprawie! – Paracetamol