在Ruby中,如何从散列输出json,并给它换行符和制表符
我正在尝试格式化在Ruby中,如何从散列输出json,并给它换行符和制表符,ruby,json,Ruby,Json,我正在尝试格式化{“key”=>“value”}以将其转换为: { "key" : "value" } 用于写入json文件。 现在我正在做: hash = {"key" => "value"} puts hash.to_json.gsub('{', '{\n\t') 开始。这就产生了 {\n\t"key":"value"} 为什么我不能换行?对漂亮的东西和避免正则表达式都很好 使用内置方法 耶 以下是选项: 缩进:用于缩进级别的字符串(默认值:') 空格:放在后面的字符串
{“key”=>“value”}
以将其转换为:
{
"key" : "value"
}
用于写入json文件。
现在我正在做:
hash = {"key" => "value"}
puts hash.to_json.gsub('{', '{\n\t')
开始。这就产生了
{\n\t"key":"value"}
为什么我不能换行?对漂亮的东西和避免正则表达式都很好 使用内置方法 耶 以下是选项:
:用于缩进级别的字符串(默认值:缩进
)'
:放在后面的字符串,一个空格
或:
分隔符(默认值:,
)'
:放在前面的空格\u
对分隔符前面的字符串(默认值::
)'
:放在JSON对象末尾的字符串(默认值:object\u nl
)'
:放在JSON数组末尾的字符串(默认值:array\u nl
)'
:allow_nan
如果true
,则应生成nan
和Infinity
,否则,如果遇到这些值,将引发异常。此选项默认为-Infinity
false
:生成JSON的数据结构中允许的最大嵌套深度。使用max_nesting
,默认值为禁用深度检查:max_nesting=>false
100
require'json'
h={:key=>:value}
放置JSON.pretty_生成(h,:indent=>“\t”)
# {
#“键”:“值”
# }
pretty\u generate
的“opts”参数值记录在。对于换行符和制表符,请重试
require 'json'
hash = {foo: 'bar'}
JSON.pretty_generate(hash, {indent: "\t", object_nl: "\n"})
注意!如果将单引号与换行符(“\n”)或制表符(“\t”)一起使用,则它们不会被解释为换行符,而是被解释为包含一个反斜杠和一个字母的普通字符串。这是一个常见的错误 有趣的发现;我发布了一个关于您的学习的后续解决方案(re:
JSON.generate
)供参考,\n
没有扩展到新行的原因是您使用了单引号。改为使用双引号。@AJED32尝试使用双引号,但仍然会给我一个实际的“\n”而不是换行符如果您在IRB中测试它,那是因为在IRB中显示为“结果”的字符串在打印到控制台之前使用String\inspect
进行转换。试试这个:put'\n\n\n'
vs.put“\n\n”
。不,我在一个通过bash脚本调用的ruby文件中测试这个。好吧,这很奇怪。所以ruby-e'put“\n\n\n”
为您输出\n\n\n
?实际上,这不会像pretty\u generate那样提供换行符。我认为indent
在默认情况下是”
(2个空格),而不是空字符串,否则,不指定它时就不会有缩进。这里是:
require 'json'
hash = {foo: 'bar'}
JSON.pretty_generate(hash, {indent: "\t", object_nl: "\n"})