Frage Wie schreibe ich in eine JSON-Datei im richtigen Format


Ich erstelle einen Hash in Ruby und möchte ihn im richtigen Format in eine JSON-Datei schreiben.

Hier ist mein Code:

tempHash = {
    "key_a" => "val_a",
    "key_b" => "val_b"
}
fJson = File.open("public/temp.json","w")
fJson.write(tempHash)
fJson.close

Und hier ist der Inhalt der resultierenden Datei:

key_aval_akey_bval_b

Ich benutze Sinatra (weiß nicht, welche Version) und Ruby v 1.8.7.

Wie kann ich das in die Datei im richtigen JSON-Format schreiben?


91
2018-03-31 23:15


Ursprung


Antworten:


Erfordern die JSON Bibliothek und verwenden 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

Ihre temp.json-Datei sieht jetzt so aus:

{"key_a":"val_a","key_b":"val_b"}

151
2018-03-31 23:18



Mit Formatierung

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

Ausgabe

{
    "key_a":"val_a",
    "key_b":"val_b"
}

74
2018-05-04 08:00



Diese Frage gilt für Ruby 1.8, kommt aber beim googlen immer noch an die Spitze.

in Ruby über 1.9 können Sie verwenden

File.write("public/temp.json",tempHash.to_json)

Anders als in anderen Antworten erwähnt, können Sie in Ruby 1.8 auch eine Liner-Form verwenden

File.open("public/temp.json","w"){ |f| f.write tempHash.to_json }

4
2017-10-19 11:59



Um dies unter Ubuntu Linux zu machen:

  1. Ich habe das Ubuntu-Paket ruby-json installiert:

    apt-get install ruby-json
    
  2. Ich habe das Skript geschrieben ${HOME}/rubybin/jsonDEMO

  3. $HOME/.bashrc inbegriffen:

    ${HOME}/rubybin:${PATH}
    

(Bei dieser Gelegenheit tippte ich auch oben auf die Bash-Befehlszeile.)

Dann funktionierte es, als ich in der Befehlszeile eingab:

jsonDemo

3
2017-09-04 18:14