Ruby で JSON パーサーを書いてみました
ちょっと Ruby で JSON データを扱う必要性に迫られまして、パーサークラスを書いてみました。既存のパーサーを使おうかとも思ったのですが、いまいち気に入ったものがなかったのと、今後ちょくちょく使いそうなのでライセンスを気にせず自由に使えるものがほしかったので、新規に書き下ろしました。特徴としては以下のような感じでしょうか。
- eval などを使わずにまともに解析しているので、堅牢性が高い。
- こちらのページのスペックをすべて満たしている(つもり)。ユニコードの数値指定(\u????)にも対応。
- 他のライブラリに依存していないので、簡単に自分のソースに埋め込める。
基本的に自由に使っていただいてかまいません。ライセンスが不明瞭だと使いにくいという場合は、改定 BSD ライセンス、 Ruby ライセンス、 LGPL のいずれかお好きなもので。
そんなわけで、ソースコードはこちら。
新バージョンをリリースし、 Snippet としてですが RubyForge で公開しました。最新のソースコードはそちらをご覧ください。
http://rubyforge.org/snippet/detail.php?type=snippet&id=148 (RubyForge)
http://webos-goodies.jp/archives/51071565.html (紹介記事)
混乱を避けるために古いソースは削除しましたので、ご了承ください。一応、 HTML の中にはコメントとして含まれていますので、どうしても見たい方(いないと思いますが^^;)は HTML のソースを表示してみてください。
使い方は、普通にインスタンスを作成して、 parse メソッドに解析したい JSON 文字列を渡せば、解析結果(Hash か Array)が返ります。入力・出力ともに UTF-8 エンコーディングを前提にしているので、適宜変換して渡してください。
例として、以下のコードで del.icio.us のブックマークが取得できます。
require 'open-uri' src = '' open('http://del.icio.us/feeds/json/hokousya?raw') do |file| src = file.read end parser = JsonParser.new json = parser.parse(src) json.each do |item| print "name : #{item['d']}\n" print "url : #{item['u']}\n\n" end
そのほかにも JSON 形式でデータを渡してくれる API はたくさんありますので、いろいろ応用できると思います。よろしければ使ってみてください。
詳しくはこちらの記事をどうぞ!
この記事にコメントする