2006/10/18

rubyでjsonをパースする

Second simplest json parser in the universeより。


require 'pp'

json =<<'ENDOFJSON'
{
"type": "menu",
"value": "File",
"items": [
{"value": "New", "action": "CreateNewDoc"},
{"value": "Open", "action": "OpenDoc"},
{"value": "Close", "action": "CloseDoc"}
]
}
ENDOFJSON

print json, "\n"

null=nil
jsonobj = eval(json.gsub(/(["'])\s*:\s*(['"0-9tfn\[{])/){"#{$1}=>#{$2}"})
pp jsonobj

をrubyに通すと以下の出力がとりあえず得られる。


% ruby ./json.rb
{
"type": "menu",
"value": "File",
"items": [
{"value": "New", "action": "CreateNewDoc"},
{"value": "Open", "action": "OpenDoc"},
{"value": "Close", "action": "CloseDoc"}
]
}

{"items"=>
[{"action"=>"CreateNewDoc", "value"=>"New"},
{"action"=>"OpenDoc", "value"=>"Open"},
{"action"=>"CloseDoc", "value"=>"Close"}],
"type"=>"menu",
"value"=>"File"}

rubyのsyntaxに文字列操作で変換して、evalしてるだけなんだけど、2行で書けるなんて思わなかったなぁ。と感心した。


それはそれとして、標準的に使われているjsonのライブラリってなんだろう?みんなactive_support使ってるのかな?