2015-10-23 109 views
1

在紅寶石漂亮打印JSON的最佳方式與智能線包裝underscore-cli「json」輸出格式化程序處理它的方式是什麼?在紅寶石打印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_before等),可用的選項,但無濟於事。

我正在編寫一個腳本,生成多個JSON文件,以便人類可以合理理解(如果需要的話)---我不能指望下劃線到處都有,所以我不能(並且呃,不想)只是通過下劃線輸出輸出,但默認的JSON.pretty_generate()輸出的文件可讀性差,大約是下劃線的三倍(2,200行vs 750)。

Ruby 2.0.0p481。

回答

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" ] 
#} 
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)的長度並且隨時可以打印輸出(用空格括起內聯,只需更新塊中的返回值,給出gsub即可。)