Scala

Scala 2.10でJSONシリアライズ

More than 5 years have passed since last update.

Play Framework 2.1でJSONをレスポンスとして返す実装を書こうとしたのですが、今日2013-05-22時点ではJerksonがScala 2.10に対応していません(Pull Requestは出ている)。

代替手段として、Jackson Scala Moduleを使うことにしました。

ライブラリの追加は下記の通り。


Build.scala

  val appDependencies = Seq(

"com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.1.3"
)

準備は以下のとおり。

import com.fasterxml.jackson.databind.ObjectMapper

import com.fasterxml.jackson.module.scala.DefaultScalaModule
val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)

DefaultScalaModuleというのが、Scalaがサポートしている型をJSONに変換するためのモジュールだそうです。

あとはJSONに変換したいScalaのインスタンスを渡してあげればOKです。今回はStringに変換する例です。

  //インスタンスobjをJSONに変換したStringに変換

val json: String = mapper.writeValueAsString(obj)

Case classを渡してあげると、引数の名前がJSONのキーになります。

case class DataPoint(title: String, value: String)

val obj = DataPoint("test", "abc")

のようなcase classがあったときのobjのJSON変換結果は


JSON

{"test":"abc"}


のようになります。

オブジェクトへのマッピング(デシリアライズ)にも、もちろん対応しています。ですが私はまだ触ったことがありません。また機会を見つけて調査してみます。