【问题标题】:How to write to a JSON file in the correct format如何以正确的格式写入 JSON 文件
【发布时间】:2011-07-27 07:45:19
【问题描述】:

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

【问题讨论】:

  • 看看这个 SO 答案:stackoverflow.com/questions/1684588/…
  • 您所做的实际上是我经常使用的东西来记录我使用的 JSON 和 YAML 结构。我将编写一小段代码将 YAML/JSON 保存到文件中,然后构建相同的结构来显示数据在转储和重新加载之前和/或之后的样子。因此,尽管您的代码运行不正确,但请坚持这个过程,因为从长远来看,它会让生活更轻松。

标签: ruby json file


【解决方案1】:

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

【讨论】:

  • 小改进:我建议块形式:File.open(...){ |f| f << h.to_json }
  • JSON.pretty_generate(tempHash) 也是 rad ruby-doc.org/stdlib-1.9.3/libdoc/json/rdoc/…
  • 这里为什么非得需要json库?那 require 语句是如何改变代码的?
【解决方案2】:

带格式

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

【讨论】:

  • 我喜欢“a+”选项。不会破坏现有数据。
  • @boulder_ruby 附加可能仅在文件格式为 JSONlines(每行一个 JSON 对象)并且很难与 pretty_generate 很好地结合时才有意义,除非输出的消费者是人。即使这样,最好生成 JSONlines 并使用类似 jq 的东西来查看输出。
【解决方案3】:

这个问题适用于 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 }

【讨论】:

    【解决方案4】:

    要在 Ubuntu Linux 上进行这项工作:

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

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

    3. $HOME/.bashrc 包括:

      ${HOME}/rubybin:${PATH}
      

    (这次我也在 bash 命令行中输入了上述内容。)

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

    jsonDemo
    

    【讨论】:

      猜你喜欢
      • 2017-06-03
      • 2020-11-08
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多