kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

Jsonda 0.4.0リリース

昨日、Jsonda 0.4.0をリリースしました。先日の日記では、次のバージョンを0.3にするようなことを書いたのですが、リリース版のメジャーバージョンは0.2 -> 0.4 -> 0.6のようにすることにしました。

Jsonda 0.2.1と同じく、Scala 2.9.1とScala 2.9.2用にクロスビルドしています。sonatypeにpublishしているので、以下の一行をbuild.sbtに追加するだけで使えます。

libraryDependencies += "com.github.kmizu" %% "jsonda"  % "0.4.0"

0.4の主な変更点は、Jsonda DSLのコアを特定のJSONライブラリ非依存にしたことです。これによって、lift-json、json4s、scala.util.parsing.jsonのオブジェクトを同じDSLで構築できます。

たとえば、

import com.github.kmizu.jsonda.dsl.LiftJsonDSL._

val person = %{
  'name :- "Kota Mizushima"
  'age :- 29
}

とした場合、lift-jsonのJsonAST.JObjectが返ってきます。また、

import com.github.kmizu.jsonda.dsl.StdJsonDSL._

val person = %{
  'name :- "Kota Mizushima"
  'age :- 29
}

とした場合、scala.util.parsing.jsonのJsonObjectが返ってきます。他にもjson4sにも対応していますが、これは今のところlift-jsonとほぼ同じなので省略。

また、Option型にも対応しました。これによって、

val hoge = %{
  'foo :- Option(100)
  'bar :- None
}

とした場合、

{"hoge":100, "bar":null}

というJSONに相当するオブジェクトが作られるようになりました。

その他には、テストケースの追加、null絡みのバグをいくつか修正しました。Jsondaの開発では、これまでGithubのIssues等のIssue Trackerを使ってなかったせいで直した不具合が曖昧になっていました。これはリリース内容書くときにも不便だということに気づいたので、これからはGithubのIssuesに不具合を登録していきます。