如何以正确的格式写入JSON文件

我正在Ruby中创build一个哈希,并想以正确的格式将其写入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" } 

为了使这个工作在Ubuntu Linux上:

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

     apt-get install ruby-json 
  2. 我在${HOME}/rubybin/jsonDEMO编写脚本

  3. 包括$HOME/.bashrc

     ${HOME}/rubybin:${PATH} 

(在这种情况下,我也在bash命令行中input了上面的内容)

然后,当我进入命令行时,它工作:

 jsonDemo 

这个问题是为ruby1.8,但它仍然在谷歌search顶部。

在1.9以上的ruby,你可以使用

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

在ruby1.8,你也可以使用一个class轮的forms

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