我在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格式将其写入文件?
答案 0 :(得分:159)
需要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"}
答案 1 :(得分:78)
格式化
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"
}
答案 2 :(得分:7)
这个问题适用于ruby 1.8,但在google搜索时它仍然排在首位。
在ruby> = 1.9中你可以使用
File.write("public/temp.json",tempHash.to_json)
除了在其他答案中提到的内容,在ruby 1.8中你也可以使用一种衬垫形式
File.open("public/temp.json","w"){ |f| f.write tempHash.to_json }
答案 3 :(得分:3)
要在Ubuntu Linux上运行:
我安装了Ubuntu软件包ruby-json:
apt-get install ruby-json
我在${HOME}/rubybin/jsonDEMO
$HOME/.bashrc
包括:
${HOME}/rubybin:${PATH}
(在这种情况下,我还在bash命令行上输入了上述内容。)
然后当我进入命令行时它起作用了:
jsonDemo