1.9とJSON

すばらしい。ruby1.9のHashはJSON風にも書けるようになってた。

ハッシュ生成は多くの場合以下のようなリテラル(ハッシュ式)で行われます。
{a => b, ... } #aはキー、bは値となる
{s: b , ... } #{ :s => b, ... } と同じ。キーがシンボルの場合の省略した書き方

http://doc.loveruby.net/refm/api/view/class/Hash

さっそく試してみる。
ドキュメントを見ればわかるけど、シンボルの場合の特例なので残念ながらRFC準拠のJSONは通らない。
せっかくの非互換バージョンアップなんだから全面的に=>から:に移行してしまってもよかったんじゃないだろうか。

irb> {a:1,b:2}
=> {:a=>1, :b=>2}
irb> {"a":1,"b":2}
SyntaxError: (irb):2: syntax error, unexpected ':', expecting tASSOC
{"a":1,"b":2}
     ^

せっかくなのでちょっとだけJavaScriptのオブジェクトと同じ挙動にしてみる。

irb> class Hash
irb> def method_missing(m,*v)
irb> m=~/(.*?)=$/ ? self[$1.to_sym]=v[0] : self[m]
irb> end
irb> end
=> nil
irb> obj={a:1,b:2}
=> {:a=>1, :b=>2}
irb> obj.a
=> 1
irb> obj.a=3
=> 3
irb> obj.a
=> 3

んー、いいかんじ(?)