http://github.com/json4s/json4s
READMEの先頭だけ訳
java の json ライブラリを除いて、現在少なくとも6つのjsonライブラリが存在します。そして、それらのライブラリのAST*1は、とても似ています。このプロジェクトの狙いは、それらのscalaのjsonライブラリから使える、一つのASTを提供することです。
今後最終的にどうなるのかよくわかりませんが、「jsonのライブラリいっぱいあるし、統一的に扱いたいよね?」的な感じらしいです。まだ2012年8月くらいから作り始めたばかりで、比較的新しいです。
そして、READMEの続きや、ソースコード見てもらうとわかると思いますが、実際はほぼコアの部分がlift-jsonそのものです。scalazのモジュールも、現状はlift-jsonのscalazの部分を持ってきただけのようです。あと、ドキュメントもlift-jsonそのままコピペしてある部分があって*2、まだこのblog書いている時点ではちゃんと整理されてないようです。
だがしかし、lift-jsonにおいて
JFieldはJValueを継承するべきではない!
わけですが、その点が改善されています。
個人的には、この点が改善されているというだけでも、json4sを使う利点がある気がします。*3
- https://github.com/json4s/json4s/blob/623b4c47d1d1b59330a7713045a4bf2a0afe9b24/core/src/main/scala/org/json4s/JsonAST.scala#L596
- https://github.com/lift/framework/blob/2.4-release/core/json/src/main/scala/net/liftweb/json/JsonAST.scala#L368
その、「JFieldはJValueを継承するべきではない!」問題は、一年くらい前からわかっていたのに、lift-jsonのmasterには*4結局まだ取り入れられてないです。以下、そのあたりの議論の参考リンク
- https://twitter.com/djspiewak/status/139037678766260224
- https://twitter.com/jonifreeman/status/139763729490378752
- http://togetter.com/li/217811
そして、実際に試してないので現状どのくらい使えるのかよくわかりませんが、MongoDBのBSON用のモジュールもあって
https://github.com/json4s/json4s/tree/623b4c47d1d1b59330a7713045a4bf2a0afe9b24/mongo/src/main/scala/org/json4s/mongo
そのあたりも統一的に扱えるようにする狙いがあるようです。
あと、すでに、最新のdispatchに、json4sのモジュールがあります。
https://github.com/dispatch/reboot/blob/0.9.3/project/build.scala#L26-32
追記:
salatというライブラリも、lift-jsonからjson4sに移行したようです
@casualjim just switched Salat from lift-json to JSON4S - props! And the Jackson module could ease @playframework integration too.
2012-10-26 02:17:57 via web to @casualjim
他にも
ところで Scalatra でも json4s 既に使われてた URL (json4sの作者がscalatraのコミッターだからよく考えれば当たり前だけど)
2012-11-06 23:24:52 via web
https://groups.google.com/d/topic/scala-user/UFuskXHE4zQ/discussion
今後
はよくわかりません。*6
まだそれほど多く使われてないし、ドキュメント未整備な部分があったり、ソースコードも単にコメントアウトされてるだけの部分が少し残っていたり、今後の方針がいまいちよくわからない部分もありますが*7
作ってる人はScalatraのコミッターで有名な人だったり、すでにdispatchにおいて採用されていたり、まぁそもそも現状コア部分はlift-jsonそのものなので、そういう意味では信頼おけるし、
今後どうなるか(みんなlift-jsonの代わりにjson4s使うようになるのか?)、かなり注目するべきライブラリな気がします。
*1:訳注: abstract syntax tree 抽象構文木
*2:まぁコアがlift-jsonそのものなので、べつにそれで構わないといえばそうなのですが
*3:逆に現時点では、それ以外の明確な利点が具体的にはよくわかってないんですが(複数のjsonライブラリを使うときとか、それを抽象化したいときとか便利なんだろうか?)、誰かそのあたり解説してください・・・
*4:まぁ互換性壊れるので
*5:現状そんな話は全くでていないようですが
*6: 個人的には、ほとんど同じなのに別々に進化するのは微妙だから、liftからjsonの部分完全に切り離して、liftがjson4sに依存が望ましい気もするけど・・・?
*7: もしかすると、それとも現状で大体完成で、たいして変更する気ないんだろうか?