在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
:如果应生成NaN
,Infinity
和-Infinity
,allow_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”)的单引号,则不会将它们解释为换行符,而是将其解释为包含一个反斜杠和一个字母的普通字符串。 这是一个常见的错误。 🙂