2015-05-13 18 views
10

In sostanza si cerca di qualcosa in YAML che potrebbe essere fatto utilizzando questo JSON:Costruire un array di elementi del dizionario in YAML?

{ 
models: 
[ 
    { 
    model: "a" 
    type: "x" 
    #bunch of properties... 
    }, 
    { 
    model: "b" 
    type: "y" 
    #bunch of properties... 
    } 
] 
} 

Finora questo è quello che ho, non funziona perché io sto ripetendo la mia chiave model, ma quello che può essere un modo corretto di fare ciò mantenendo quella parola chiave model?

models: 
model: 
    type: "x" 
    #bunch of properties... 
model: 
    type: "y" 
    #bunch of properties... 
+1

hai provato caricare il tuo codice JSON in una struttura di dati nativo (in lingua di propria scelta), poi usando una libreria YAML per serializzare quella struttura? Sempre più facile lasciare che la macchina faccia il lavoro per te. :) –

risposta

36

Utilizzare un trattino per avviare un nuovo elemento della lista:

models: 
- model: "a" 
    type: "x" 
    #bunch of properties... 
- model: "b" 
    type: "y" 
    #bunch of properties... 
15

Probabilmente sono state cercando a YAML per troppo tempo perché quello che voi chiamate JSON nel tuo post non è, è più metà e metà di YAML e JSON. Consente di saltare il fatto che JSON non permette i commenti che iniziano con un #, si dovrebbe citare le stringhe che sono le chiavi e si dovrebbe mettere , tra gli elementi nella mappatura:

{ 
"models": 
[ 
    { 
    "model": "a", 
    "type": "x" 
    }, 
    { 
    "model": "b", 
    "type": "y" 
    } 
] 
} 

Questo è corretto JSON, così come è YAML, perché YAML è un superset di JSON. È possibile ad es. controlla online su questo YAML parser.

È possibile convertire al-style blocco che sembrano preferire come YAML utilizzando this online converter, o se si avrebbe ruamel.yaml (la mia versione migliorata del PyYAML) installato è possibile utilizzare la sua utilità a riga di comando per convertire JSON per bloccare YAML (in la versione 0.9.1 è anche possibile forzare stile di flusso):

yaml json in.json 

che si ottiene:

models: 
- model: a 
    type: x 
- model: b 
    type: y 
+1

Questa * è * la risposta migliore. Sono un po 'imbarazzato per il mio accettato. –

+0

Grazie, ma guardando i conteggi in aumento, ovviamente la tua risposta soddisfa un bisogno e il mio no. – Anthon

+0

Sto descrivendolo con la dicotomia "cosa vogliono le persone" contro "cosa serve la gente"? I punti che stai facendo qui sono importanti: qualcuno che genera YAML usando uno strumento come JQ e poi lo converte in block-style se preferisce con gli strumenti che link avrà una soluzione molto più robusta di qualcuno che prova a generare a mano il testo per adattarlo ad un esempio. –

Problemi correlati