如何以正确的格式写入 JSON 文件
Posted
技术标签:
【中文标题】如何以正确的格式写入 JSON 文件【英文标题】:How to write to a JSON file in the correct format 【发布时间】: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 答案:***.com/questions/1684588/… 您所做的实际上是我经常使用的东西来记录我使用的 JSON 和 YAML 结构。我将编写一小段代码将 YAML/JSON 保存到文件中,然后构建相同的结构来显示数据在转储和重新加载之前和/或之后的样子。因此,尽管您的代码运行不正确,但请坚持这个过程,因为从长远来看,它会让生活更轻松。 【参考方案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 上进行这项工作:
我安装了 Ubuntu 包 ruby-json:
apt-get install ruby-json
脚本我写在$HOME/rubybin/jsonDEMO
$HOME/.bashrc
包括:
$HOME/rubybin:$PATH
(这次我也在 bash 命令行中输入了上述内容。)
然后当我在命令行输入时它起作用了:
jsonDemo
【讨论】:
以上是关于如何以正确的格式写入 JSON 文件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用“imageWithData”保存和检索UIImages保持正确的图像格式?
如何强制Python XlsxWriter以自定义格式写入单元格