12

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

{
    "key" : "value"
}

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

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

开始。这输出

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

为什么我不能换行?

4

3 回答 3

25

是的,漂亮的东西,是的,避免正则表达式!

使用内置JSON.pretty_generate方法

require 'json'
puts JSON.pretty_generate hash, options

耶!

这是选项:

  • indent:用于缩进级别的字符串(默认值:)''
  • space: 一个放在后面的字符串,一个:,分隔符(默认值:)''
  • space_before: 放在一:对分隔符之前的字符串(默认值:''),
  • object_nl: 放在 JSON 对象末尾的字符串(默认值:''),
  • array_nl: 放在 JSON 数组末尾的字符串(默认值:''),
  • allow_nan: trueif NaN, Infinity, and-Infinity应该生成,否则如果遇到这些值则抛出异常。此选项默认为false.
  • max_nesting:要从中生成 JSON 的数据结构中允许的最大嵌套深度。禁用深度检查:max_nesting => false,默认为100.
于 2013-08-28T18:02:03.013 回答
4

正如@naomik 提到的,尝试使用JSON.pretty_generate带有“缩进”选项的选项卡的内置函数,例如:

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

“opts”参数的值pretty_generate记录在generate.

于 2013-08-28T18:13:22.080 回答
2

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

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

注意!如果在换行符 ("\n") 或制表符 ("\t") 中使用单引号,它们将不会被解释为换行符,而是包含一个反斜杠和一个字母的普通字符串。这是一个常见的错误。:)

于 2016-10-10T10:25:08.357 回答