在Ruby中打印打印JSON

用smart line wrapping在Ruby中漂亮打印JSON的最佳方法是什么,下划线cli中的“json”输出格式化程序处理它的方式是什么?

例如,一个普通的JSON漂亮打印机会输出:

{
  "a": [
    "b",
    "c"
  ],
  "d": {
    "e": "f"
  },
  "g": [
    "some longer string"
  ]
}

但是我在Ruby中寻找一个可配置的漂亮打印机,就像下划线cli一样,注意到小的结构会造成毫无意义的短线条,所以输出如下所示:

{
  "a": [ "b", "c" ],
  "d": { "e": "f" },
  "g": [ "some longer string" ]
}

我玩过JSON.generate() (space,space_before等)中的选项,但无济于事。

我正在编写一个脚本,生成多个JSON文件,以便人类可以理解(如果需要的话) - 我不能期望下划线到处都可用,所以我不能(也不会想要)只是通过下划线管道输出,但默认的JSON.pretty_generate()输出文件的可读性要差得多,大约是下划线(2,200行vs 750)的三倍。

Ruby 2.0.0p481。


看起来neatjson会做我想做的事。


如果你的需求是最小的,你可以玩JSON#generate选择,以避免使用额外的宝石。 虽然我完全同意neatjson使它更清洁。

一个简单的例子:

a = {"a"=>["b", "c"], "d"=>{"e"=>"f"}, "g"=>["some longer string"]}
puts JSON.pretty_generate(a,  array_nl:'')
#{
#  "a": [    "b",    "c"  ],
#  "d": {
#    "e": "f"
#  },
#  "g": [    "some longer string"  ]
#}

只要你只想做唯一的事情,我会用简单的gsubbing(这里很安全):

▶ #                                  ⇓ ldelim  ⇓ not nest ⇓ cnt ⇓ rdelim
▶ puts JSON.pretty_generate(a).gsub(/(?<=[|{)[^[{]}]{,30}(?=]|})/m) do |m| 
  m.gsub(/s+/, ' ').strip
end
#⇒ {
#  "a": ["b", "c"],
#  "d": {"e": "f"},
#  "g": ["some longer string"]
# }

它可以根据允许的“内联”(上例中为30)的长度进行配置,并且可以根据需要随时打印输出(用空格包围内联,只需更新gsub的返回值即可)。

链接地址: http://www.djcxy.com/p/47165.html

上一篇: Printing printing JSON in Ruby

下一篇: How To Render Correct JSON format with raised error