2012-01-18 15 views
13

Sto provando a utilizzare YAML per creare un elenco di tutti i stored process utilizzati in un'applicazione e da dove vengono chiamati. Ho immaginato qualcosa di simile in basso, ma penso che YAML non consenta l'annidamento a più livelli.Nesting a più livelli in YAML

C'è un modo per farlo in YAML e se no, quali altre alternative ci sono?

risposta

13

Questo è esattamente il modo in cui ho usato i livelli nidificati in YAML per i file di configurazione per script perl. This YAML Tutorial potrebbe essere un buon riferimento per te su come gestire la struttura che desideri in Ruby.

Penso che il tuo problema stia cercando di mescolare i tipi. Suggerisco di revisione in questo modo:

reporting: 
    stored_procs: 
    reportingsp 
     uses: 
     usedin: breadcrumb 
    secondProc 
     uses: 
     usedin: something_else 
+0

hmm che esercitazione non mostra profonda nidificazione. Se carico lo yaml sopra descritto nel mio script ruby, mi dà un errore durante il caricamento del file yaml. – Anthony

+0

Ho sicuramente usato più livelli di nidificazione. Quello che noto, che non ho fatto, è che hai un mix di cose. per esempio. stored_proc con un valore e più nidificati sotto. Questo potrebbe essere il problema. – Ilion

+0

sì, questo è il problema. Voglio nidificazione profonda in modo che tutto sia allineato. Immagino che non sia possibile con yaml – Anthony

13

Come notato da @Ilion, non si può avere una proprietà che punta a sia una stringa e un oggetto; avresti bisogno di un array o di dare un'etichetta ai tuoi nomi memorizzati_proc. Inoltre, continui a scorrere le tue chiavi usando lo stesso nome, quando ciò che vuoi veramente è un array. Ecco un semplice esempio e prova che funziona:

MY_YAML = " 
access_log: 
    - 
    name: getsomething 
    uses: 
     - some->bread 
     - something else here 
    - 
    name: anothersp 
    uses: 
     - blahblah" 

require 'yaml' 
require 'pp' 
pp YAML.load(MY_YAML) 
#=> {"access_log"=>[ 
#=> {"name"=>"get something", "uses"=>["some->bread", "something else here"]}, 
#=> {"name"=>"anothersp", "uses"=>["blahblah"]} 
#=> ]} 
-3
--- 
access_log: 
    - stored_proc: getsomething  
    - uses:  
    - usedin: some->bread->crumb  
    - usedin: something else here 
    - stored_proc: anothersp  
    - uses:  
    - usedin: blahblah 
reporting: 
    - stored_proc: reportingsp  
    - uses:  
    - usedin: breadcrumb 
+0

Perché è stato negato così tutti possiamo imparare? –

+4

@Brian aggira l'impossibilità di disporre di più chiavi del dizionario con lo stesso nome sostituendo ogni elemento del dizionario con un elenco di elementi singoli contenente un dizionario a elemento singolo. Rende la struttura molto profonda e piuttosto particolare. Prova ad incollarlo su http://www.yamllint.com/ o da qualche altra parte e vedrai più chiaramente come è realmente la struttura. – Godsmith