在Ruby中,如何从哈希输出json并为其提供换行符和制表符

我正在尝试格式化{"key" => "value"}以将其转换为:

 { "key" : "value" } 

用于写入json文件。 现在我正在做:

 hash = {"key" => "value"} puts hash.to_json.gsub('{', '{\n\t') 

开始。 这个输出

 {\n\t"key":"value"} 

为什么我不能换线?

是的漂亮的事情和yay避免regexen!

使用内置的JSON.pretty_generate方法

 require 'json' puts JSON.pretty_generate hash, options 

好极了!

这是选项:

  • indent :用于缩进级别的字符串(默认值: '' ),
  • space :放在后面的字符串,a :或分隔符(默认值: '' ),
  • space_before :放在a : pair分隔符之前的字符串(默认值: '' ),
  • object_nl :放在JSON对象末尾的字符串(默认值为'' ),
  • array_nl :放在JSON数组末尾的字符串(默认值: '' ),
  • allow_nan :如果应生成NaNInfinity-Infinityallow_nan true ,否则如果遇到这些值则抛出exception。 此选项默认为false
  • max_nesting :要从中生成JSON的数据结构中允许的最大嵌套深度。 禁用深度检查:max_nesting => false ,默认为100

正如@naomik所提到的,尝试使用内置的JSON.pretty_generate和“indent”选项的选项卡,例如:

 require 'json' h = {:key => :value} puts JSON.pretty_generate(h, :indent => "\t") # { # "key": "value" # } 

generate中记录了pretty_generate的“opts”参数的值。

对于换行符和制表符,请尝试

 require 'json' hash = {foo: 'bar'} JSON.pretty_generate(hash, {indent: "\t", object_nl: "\n"}) 

NB! 如果使用带有换行符(“\ n”)或制表符(“\ t”)的单引号,则不会将它们解释为换行符,而是将其解释为包含一个反斜杠和一个字母的普通字符串。 这是一个常见的错误。 🙂