如何以正确的格式写入 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保持正确的图像格式?

如何验证json格式的正确性

如何正确访问 de BIND DNS 以写入某些文件?

如何强制Python XlsxWriter以自定义格式写入单元格

如何在python中将字符串列表转换为格式正确的json? [复制]

无法从 CLOB 列写入正确的 XML 数据