我正在尝试格式化{"key" => "value"}
以将其转换为:
{
"key" : "value"
}
用于写入 json 文件。现在我在做:
hash = {"key" => "value"}
puts hash.to_json.gsub('{', '{\n\t')
开始。这输出
{\n\t"key":"value"}
为什么我不能换行?
是的,漂亮的东西,是的,避免正则表达式!
使用内置JSON.pretty_generate方法
require 'json'
puts JSON.pretty_generate hash, options
耶!
这是选项:
indent
:用于缩进级别的字符串(默认值:)''
,space
: 一个放在后面的字符串,一个:
或,
分隔符(默认值:)''
,space_before
: 放在一:
对分隔符之前的字符串(默认值:''
),object_nl
: 放在 JSON 对象末尾的字符串(默认值:''
),array_nl
: 放在 JSON 数组末尾的字符串(默认值:''
),allow_nan
: true
if NaN
, Infinity
, and-Infinity
应该生成,否则如果遇到这些值则抛出异常。此选项默认为false
.max_nesting
:要从中生成 JSON 的数据结构中允许的最大嵌套深度。禁用深度检查:max_nesting => false
,默认为100
.正如@naomik 提到的,尝试使用JSON.pretty_generate
带有“缩进”选项的选项卡的内置函数,例如:
require 'json'
h = {:key => :value}
puts JSON.pretty_generate(h, :indent => "\t")
# {
# "key": "value"
# }
“opts”参数的值pretty_generate
记录在generate
.
对于换行符和制表符,请尝试
require 'json'
hash = {foo: 'bar'}
JSON.pretty_generate(hash, {indent: "\t", object_nl: "\n"})
注意!如果在换行符 ("\n") 或制表符 ("\t") 中使用单引号,它们将不会被解释为换行符,而是包含一个反斜杠和一个字母的普通字符串。这是一个常见的错误。:)