Je crée un hachage dans Ruby) et je veux l'écrire dans un fichier JSON au format correct.
Voici mon code:
tempHash = {
"key_a" => "val_a",
"key_b" => "val_b"
}
fJson = File.open("public/temp.json","w")
fJson.write(tempHash)
fJson.close
Et voici le contenu du fichier résultant:
key_aval_akey_bval_b
J'utilise Sinatra (je ne sais pas quelle version) et Ruby v 1.8.7.
Comment puis-je écrire cela dans le fichier au format JSON correct?
Exigez la bibliothèque JSON , et utilisez to_json
.
require 'json'
tempHash = {
"key_a" => "val_a",
"key_b" => "val_b"
}
File.open("public/temp.json","w") do |f|
f.write(tempHash.to_json)
end
Votre fichier temp.json ressemble maintenant à:
{"key_a":"val_a","key_b":"val_b"}
Avec mise en forme
require 'json'
tempHash = {
"key_a" => "val_a",
"key_b" => "val_b"
}
File.open("public/temp.json","w") do |f|
f.write(JSON.pretty_generate(tempHash))
end
Sortie
{
"key_a":"val_a",
"key_b":"val_b"
}
Cette question est pour Ruby 1.8 mais il vient toujours en haut quand googler.
dans Ruby> = 1,9, vous pouvez utiliser
File.write("public/temp.json",tempHash.to_json)
autre que ce qui est mentionné dans d’autres réponses, dans Ruby 1.8, vous pouvez également utiliser un formulaire
File.open("public/temp.json","w"){ |f| f.write tempHash.to_json }
Pour que cela fonctionne sur Ubuntu Linux:
J'ai installé le paquet Ubuntu Ruby-json:
apt-get install Ruby-json
J'ai écrit le script en ${HOME}/rubybin/jsonDEMO
$HOME/.bashrc
inclus:
${HOME}/rubybin:${PATH}
(A cette occasion, j'ai également saisi ce qui précède sur la ligne de commande bash.)
Ensuite, cela a fonctionné quand j'ai entré sur la ligne de commande:
jsonDemo