Sto lavorando con un output di comando restituito come stringa di un hash di Ruby. (Da qualcosa chiamato mcollective).Conversione di una stringa di hash di Ruby in un dizionario Python
Ecco una stringa esempio che sto ricevendo:
{:changes=>{"total"=>0}, :events=>{"failure"=>0, "success"=>0, "total"=>0}, :version=> {"puppet"=>"2.7.21 (Puppet Enterprise 2.8.1)", "config"=>1381497648}, :time=> {"filebucket"=>0.000287, "cron"=>0.00212, "package"=>0.398982, "exec"=>0.001314, "config_retrieval"=>5.60761618614197, "anchor"=>0.001157, "service"=>0.774906, "total"=>9.85111718614197, "host"=>0.002662, "user"=>0.063606, "file"=>2.998467, "last_run"=>1381497660}, :resources=> {"skipped"=>6, "failed_to_restart"=>0, "out_of_sync"=>0, "failed"=>0, "total"=>112, "restarted"=>0, "scheduled"=>0, "changed"=>0}}
Sono in grado di scrivere un mini parser per questo, ma sarebbe un compito laborioso. Qualcuno sa di una libreria o di uno snippet di codice che potrebbe convertire questo per me in un dizionario Python?
Se pensi che dovrei solo analizzarlo, tutti i suggerimenti sono ben accetti.
Un hack rapida sarebbe quella di sostituire solo => con: e: [a-z] + con "\ 1" e quindi chiamare ast.literal_eval o json.loads. Ciò non sarebbe corretto poiché ignora i valori letterali stringa, ma potrebbe essere abbastanza buono per ora. – Antimony
Secondo i loro documenti http://docs.puppetlabs.com/mcollective/reference/basic/basic_cli_usage.html possono anche esportare JSON: '-j' flag. – georg
Non nella versione im in corso purtroppo. Ma sì, sarebbe meglio – joeButler