JSONデコード: ruby

最近はJSONばっかりだが、一昨日書いたC++版のJSONパーサrubyバインディングを作ってみた。

ソースコード(ruby用にいろいろ変更が加わっているが)今まで書いてきたJSONのそれと基本的には同じものなので割愛する。
インストール用のファイル一式はここに置いておく(json-0.1.0)。

特徴

・パースが速い。※ とはいっても、`gem install json`でインストールできるjsonパーサの1.8倍くらい

・単機能(実質的にメソッド一つ)。
・strictなJSONのみパース可能。

インストール手順

一般的なruby拡張ライブラリと同様。

> tar zxvf json-0.1.0.tar.gz
> cd json-0.1.0
> ruby extconf.rb
> make 
> sudo make install

使い方

下のような感じ。

$KCODE='u'  # 文字コードはUTF-8が前提
require 'json'

parser = Json::Parser.new

# 使えるメソッドはparseのみ
parser.parse '{"key":[1,"2",false,3]}'
=> {"key"=>[1.0, "2", false, 3.0]}

感想

parseメソッドの実行時間の40%近く*1が、rb_str_new関数で占められていることには驚いた。
何とかならないかな?

*1:この比率は、もちろんパース対象のJSON文字列によって変わる。ここで挙げているのは、(テストに使った)Googleのweb検索APIが返してくるJSONの場合の数値。