一汁三菜

インターネットのインフラよりな技術の話題、Web周りの技術的な話題、趣味のマラソン、旅行、その他日々の記録をしています。

JSON Pointerを実装してみる

せっかくJSON PointerとJSON Patchについて短いInternet-Draftを書いたんだから、ライブラリでも使ってみようかと思ってみたら、案外ありませんでした。たまに見つけてみても、実はリポジトリを公開してあるだけで中身は未完成だったりという物が多くて、意外と実装されていないんだなーというのを知りました。確かに仕様が簡易すぎて、この位ならば必要に応じてベタにコードを書いていけばいいじゃないかというのは分からないでも無い。

という事で、せっかくなのでRubyのJSONライブラリをforkして書いてみています。とりあえずJSON Pointerについては実装完了。Internet-Draftsに書かれている例くらいはunit testで通るようにしました。

JSON Patchはまだこれからです。ライブラリを作るだけではなくて、これを使ったアプリケーションを書かないと、ライブラリを書くのが目的になってしまうので、何かしら作りたいところです。既にライブラリを書くことが目的になってしまっている感はありますが。

使い方は以下のような感じです。

require 'json'
require 'json/pointer'

json = JSON.parse( 検索したいJSONデータ )
pattern = # 検索パターン
JSON::Pointer.find(pattern, json)

簡単な仕様なだけあって、コードも短いです。ちょっとした日曜大工には最適でした。その割にエスケープする必要のある文字の扱いやら、キーが空文字列の場合の挙動などで手間がかかってしまいましたが、最終的にはコンパクトにまとめられました。