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

时间:2011-03-31 23:15:40

标签: ruby json file

我在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格式将其写入文件?

4 个答案:

答案 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上运行:

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

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

  3. 中编写了剧本
  4. $HOME/.bashrc包括:

    ${HOME}/rubybin:${PATH}
    
  5. (在这种情况下,我还在bash命令行上输入了上述内容。)

    然后当我进入命令行时它起作用了:

    jsonDemo