web-dev-qa-db-fra.com

Comment écrire dans un fichier JSON au bon format

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?

100
dt1000

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"}
161
Mike Lewis

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"
}
80
Anders 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 }
8
Haseeb Eqx

Pour que cela fonctionne sur Ubuntu Linux:

  1. J'ai installé le paquet Ubuntu Ruby-json:

    apt-get install Ruby-json
    
  2. J'ai écrit le script en ${HOME}/rubybin/jsonDEMO

  3. $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
3
daggett