使用智能换行>>在Ruby 中打印JSON的最佳方法是什么,underscore-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()
中提供的选项(空格,空格等),但无济于事。
我正在编写一个生成多个JSON文件的脚本,这些文件旨在让人类可以理解(如果需要的话) - 我不能指望在任何地方都可以使用下划线,所以我不能(并且,呃,不会我想要通过下划线输出输出,但是默认的JSON.pretty_generate()
输出文件的可读性差得多,大约是下划线的三倍(2,200行对750)。
Ruby 2.0.0p481。
答案 0 :(得分:1)
neatjson看起来会what I want。
答案 1 :(得分:0)
如果您的要求很少,您可以使用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" ]
#}
答案 2 :(得分:0)
只要你想做唯一的事情,我就会选择简单的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)并准备好根据需要打印输出(用空格包围内联,只需更新块中的返回值,赋予{{1} }。)