2016-06-20 56 views
5

Questo è molto specifico ma mi ha lasciato perplesso. Trattiamo le chiavi nidificate + array regolari quasi lo stesso su analisi - a volte aggiungendo informazioni extra quando necessario, in questo modo:Stringhe multi-linea YAML: chiavi vs valori di matrice

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

... che mi dà questo JSON:

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

tutto fresco e raffinato. Entrando stringhe multilinea per i contenuti diventa più disordinato, ma ancora funziona bene come questo (mantenere incollare quelli a Online YAML Parser o qualche altro compilatore per riferimento):

--- 
#works: 

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

andare più in profondità, le stringhe multilinea nel mio 2 ° livello lavoro matrice come bene, come previsto dalle specifiche:

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

Wohoo! Ma non appena ho mix chiavi multilinea e stringhe di array multi-linea sullo stesso piano, le mie pause di impostazione:

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

Come risolvere questo?

risposta

7

YAML si interrompe se si mischiano le chiavi e gli elementi dello stesso livello sullo stesso livello. Non hai bisogno di stringhe multi-linea per questo:

- 1 
? 2 
: 3 

Che cosa dovrebbe essere analizzato? Un array? Una mappatura? Questo, tuttavia, funziona:

- 1 
- ? 2 
    : 3 

Così si può risolvere il tuo YAML come questo:

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

Grazie tanto per me educare su questo argomento! – Paracetamol