web-dev-qa-db-ja.com

JSONファイルに正しい形式で書き込む方法

Rubyでハッシュを作成していますが、正しい形式でJSONファイルに書き込みたいです。

ここに私のコードがあります:

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

結果のファイルの内容は次のとおりです。

key_aval_akey_bval_b

Sinatra(どのバージョンかわからない)とRuby v 1.8.7を使用しています。

これを正しいJSON形式でファイルに書き込むにはどうすればよいですか?

100
dt1000

JSON ライブラリを必要とし、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

Temp.jsonファイルは次のようになります。

{"key_a":"val_a","key_b":"val_b"}
161
Mike Lewis

書式設定あり

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

出力

{
    "key_a":"val_a",
    "key_b":"val_b"
}
80
Anders B

この質問はRuby 1.8に対するものですが、グーグル検索の際にはまだ一番上にあります。

Ruby> = 1.9では使用できます

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

他の回答で言及されたもの以外に、Ruby 1.8では、1つのライナーフォームを使用することもできます

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

Ubuntu Linuxでこれを機能させるには:

  1. UbuntuパッケージRuby-jsonをインストールしました。

    apt-get install Ruby-json
    
  2. 私は${HOME}/rubybin/jsonDEMOでスクリプトを書きました

  3. $HOME/.bashrcが含まれています:

    ${HOME}/rubybin:${PATH}
    

(このとき、bashコマンドラインで上記のコマンドも入力しました。)

その後、コマンドラインで入力すると機能しました:

jsonDemo
3
daggett