如何以正确的格式写入 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 (不知道是什么版本)和 Rubyv1.8.7。

我怎样才能以正确的 JSON 格式将其写入文件?

131666 次浏览

需要 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"
}

为了在 Ubuntu Linux 上实现这一点:

  1. 我安装了 Ubuntu 包 ruby-json:

    apt-get install ruby-json
    
  2. I wrote the script in ${HOME}/rubybin/jsonDEMO

  3. $HOME/.bashrc included:

    ${HOME}/rubybin:${PATH}
    

(On this occasion I also typed the above on the bash command line.)

Then it worked when I entered on the command line:

jsonDemo

这个问题是针对 ruby 1.8的,但是在谷歌搜索的时候它仍然排在第一位。

在 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 }