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


111

我正在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和YAML结构的大量工作。我将编写一小段代码将YAML / JSON保存到文件中,然后构建相同的结构,以显示转储和重新加载之前和/或之后数据的外观。因此,尽管您的代码运行不正常,但请坚持执行此过程,因为从长远来看,这会使生活变得更轻松。
Tin Man

Answers:



94

带有格式

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

1
我喜欢“ a +”选项。不破坏现有数据。
boulder_ruby

2
@boulder_ruby附加仅在文件格式为JSONlines(每行一个JSON对象)且几乎不与结合时才有意义pretty_generate,除非输出的使用者是人类。即使这样,最好还是生成JSONlines并使用类似的东西jq来查看输出。
Sim

11

这个问题是针对ruby 1.8的,但是在谷歌搜索时它仍然是最重要的。

在红宝石> = 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

要在Ubuntu Linux上执行此操作:

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

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

  3. $HOME/.bashrc 包括:

    ${HOME}/rubybin:${PATH}

(在这种情况下,我还在bash命令行上输入了以上内容。)

然后,当我在命令行上输入时它就起作用了:

jsonDemo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.