Jacksonは、JSON を高速に処理するための Java ライブラリです。Jerkson プロジェクトは Jackson を包み込みますが、放棄されたようです。ネイティブ Scala データ構造へのシリアル化と逆シリアル化のために、Jackson のScala モジュールに切り替えました。
取得するには、以下を に含めますbuild.sbt
。
libraryDependencies ++= Seq(
"com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.1.3",
...
)
次に、あなたの例は、次のJacksonラッパーで逐語的に機能します(jackson-module-scalaテストファイルから抽出しました):
import java.lang.reflect.{Type, ParameterizedType}
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.`type`.TypeReference;
object JacksonWrapper {
val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)
def serialize(value: Any): String = {
import java.io.StringWriter
val writer = new StringWriter()
mapper.writeValue(writer, value)
writer.toString
}
def deserialize[T: Manifest](value: String) : T =
mapper.readValue(value, typeReference[T])
private [this] def typeReference[T: Manifest] = new TypeReference[T] {
override def getType = typeFromManifest(manifest[T])
}
private [this] def typeFromManifest(m: Manifest[_]): Type = {
if (m.typeArguments.isEmpty) { m.runtimeClass }
else new ParameterizedType {
def getRawType = m.runtimeClass
def getActualTypeArguments = m.typeArguments.map(typeFromManifest).toArray
def getOwnerType = null
}
}
}
その他の Scala 2.10 JSON オプションには、Programming Scala book に基づくTwitter のscala-jsonが含まれます。これは単純ですが、パフォーマンスが犠牲になります。解析にparboiledを使用するSpray -jsonもあります。最後に、Play の JSON 処理は良さそうに見えますが、Play プロジェクトから切り離すのは簡単ではありません。