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形式でファイルに書き込むにはどうすればよいですか?
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"}
書式設定あり
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"
}
この質問は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 }
Ubuntu Linuxでこれを機能させるには:
UbuntuパッケージRuby-jsonをインストールしました。
apt-get install Ruby-json
私は${HOME}/rubybin/jsonDEMO
でスクリプトを書きました
$HOME/.bashrc
が含まれています:
${HOME}/rubybin:${PATH}
(このとき、bashコマンドラインで上記のコマンドも入力しました。)
その後、コマンドラインで入力すると機能しました:
jsonDemo