JsonBuilder Gem をリリースしました

smart.fm API で XML と JSON の双方に含まれる情報を一致させる為に、XML Builder (Builder::XmlMarkup) と同じインタフェースで JSON を生成する JsonBuilder をリリースしました。

http://github.com/nov/jsonbuilder

これで XML フォーマットも JSON フォーマットも同じインタフェースで定義できるので、「XML の仕様を変更したのに、JSON の変更を忘れてた」なんてことが無くなります。

いままで smart.fm の XML と JSON の情報を一致させるのにいろいろ苦労しましたが、これでようやくその苦労から解放されそうです。

こんな感じで使えます。

def to_markup(format, options = {})
  markup = case format
  when :xml
    Builder::XmlMarkup.new
  when :json
    Builder::JsonMarkup.new
  end
markup.user( :id => self.id, :url => self.url ) do markup.description(self.description) markup.array_mode do markup.friends do package. friends.each do |friend| markup << friend.to_markup(format) end end end end markup.target! end
def to_xml(options = {}) self.to_markup(:xml, options) end
def to_json(options = {}) self.to_markup(:json, options).to_json end

XML -> JSON の変換には、いくつかそのままでは変換できない点もあり、利用にはいくつか制約があります。利用時の制約を把握しないとなかなか使いずらいので、その辺りも追々ドキュメント化します。
(制約例:JSON に Array 要素を入れる場合には array_mode do ... end を使わなければならない、など)