Lift Json の case class への変換がとても便利な件

こういうJson

*1

こんな case class 定義しておくだけで

いい感じに勝手に変換されます。 Lift JsonのREADME 日本語訳 に書いてあるんですが、あまり知られてないというかそこまで多く使われてない気がしたので改めて書いてみました。内部的には、このあたり
https://github.com/lift/framework/blob/2.4-release/core/json/src/main/scala/net/liftweb/json/ScalaSig.scala
https://github.com/lift/framework/blob/2.4-release/core/json/src/main/scala/net/liftweb/json/Meta.scala
で、 ScalaSignature っていう、コンパイラアノテーションとしてつけているメタ情報を読み取るっていう、普通はやらない、すごいことやってます。*2 まぁメタメタしたことやってるので、パフォーマンスはでない気がしますが*3、とてもDRYに定義できるので便利です。

sbtから使う場合、build.sbtはたとえばこんな感じ*4 *5

実際リクエストを投げて変換する場合の例

以前似たような感じで RedmineAPI についても作ったことがあるのでついでに貼っておきます

https://gist.github.com/1413277


追記:
ところで、jerksonspray-jsonも似たような機能あるみたいですね

*1: http://api.stackoverflow.com/1.1/questions/6288412 とか http://api.stackoverflow.com/1.1/questions?tagged=scala とか

*2: Kindとかでてくるよ https://github.com/lift/framework/blob/2.4-release/core/json/src/main/scala/net/liftweb/json/Meta.scala#L208-210 すげーーー(´・ω・`)

*3:計測したわけではない

*4:なんかstackoverflowのAPIのレスポンスがgzipだったので、gzipを解凍する機能がデフォルトでついてるdispatch使った

*5: scala timeは必ずしも必要なわけではないけど、joda time使う場合はいつもscala time使ってるので