读写JSON并在Ruby中维护格式

时间:2013-02-26 03:27:26

标签: ruby json

我有一个结构良好(人造)的JSON文件,我想以编程方式添加和更新值。

问题是JSON文件的当前结构对于我和我的同事来说非常容易阅读,我们希望它保持相同(或非常相似)的缩进,行间距和键顺序等。

有没有办法用Ruby做到这一点?

1 个答案:

答案 0 :(得分:1)

Ruby的JSON支持pretty_generate,它是一个“漂亮”的生成器,但它绝不会试图记住你是如何构建一个特定的JSON数据文件的,也不应该这样。

foo = {'a' => 1, 'b' => %w[2 3]}
puts JSON.generate(foo)
{"a":1,"b":["2","3"]}
puts JSON.pretty_generate(foo)
{
  "a": 1,
  "b": [
    "2",
    "3"
  ]
}

JSON是一种数据序列化格式,与YAML和XML一起,它旨在准确地移动数据。在保持任意行间距或前导空格的同时执行此操作不会为序列化器添加任何值。

请记住,在输出中添加“漂亮”会增加所移动数据的大小,而不会提高质量:

puts JSON.generate(foo).size
21

puts JSON.pretty_generate(foo).size
43

使那个小哈希“漂亮”的大小增加了一倍,随着时间的推移,这会减少浏览器或服务器之间的网络吞吐量。我建议在最初调试代码时只打扰“漂亮”输出,然后在对数据移动感到满意后放弃它,以支持速度和效率。数据将是相同的。

如果您担心能够修改某些数据,请编写一个简单的读取器和/或JSON生成器,它可以使用标准的Ruby数据对象,然后让JSON对其进行序列化,并将输出写入文件。