Estou criando um hash em Ruby e quero gravá-lo em um arquivo JSON, no formato correto.
Aqui está o meu código:
tempHash = {
"key_a" => "val_a",
"key_b" => "val_b"
}
fJson = File.open("public/temp.json","w")
fJson.write(tempHash)
fJson.close
E aqui está o conteúdo do arquivo resultante:
key_aval_akey_bval_b
Estou usando Sinatra (não sei qual versão) e Ruby v 1.8.7.
Como posso gravar isso no arquivo no formato JSON correto?
Respostas:
Exija a biblioteca JSON e use
to_json
.Seu arquivo temp.json agora se parece com:
fonte
File.open(...){ |f| f << h.to_json }
JSON.pretty_generate(tempHash)
também é rad ruby-doc.org/stdlib-1.9.3/libdoc/json/rdoc/…Com formatação
Resultado
fonte
pretty_generate
, a menos que o consumidor da saída seja um humano. Mesmo assim, é melhor gerar JSONlines e usar algo comojq
para ver a saída.Esta pergunta é para Ruby 1.8, mas ainda vem em primeiro lugar ao pesquisar no Google.
em ruby> = 1,9 você pode usar
diferente do que foi mencionado em outras respostas, no Ruby 1.8 você também pode usar um formulário de liner
fonte
Para fazer isso funcionar no Ubuntu Linux:
Instalei o pacote do Ubuntu ruby-json:
Eu escrevi o roteiro em
${HOME}/rubybin/jsonDEMO
$HOME/.bashrc
incluído:(Nesta ocasião, eu também digitei o código acima na linha de comando do bash.)
Então funcionou quando entrei na linha de comando:
fonte