Scala 2.10 似乎已经破坏了一些旧的库(至少目前是这样),比如 Jerkson 和 lift-json。
目标可用性如下:
case class Person(name: String, height: String, attributes: Map[String, String], friends: List[String])
//to serialize
val person = Person("Name", ....)
val json = serialize(person)
//to deserialize
val sameperson = deserialize[Person](json)
但我很难找到适用于 Scala 2.10 的生成和反序列化 Json 的现有良好方法。
在 Scala 2.10 中有最佳实践方法吗?
最佳答案
Jackson是一个快速处理 JSON 的 Java 库。 Jerkson 项目包含了 jackson ,但似乎被放弃了。我已经切换到 jackson 的 Scala Module用于对原生 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 选项包括 Twitter 的 scala-json基于 Programming Scala 书——它很简单,但以性能为代价。还有spray-json , 它使用 parboiled用于解析。最后,Play's JSON handling看起来不错,但它并不容易与 Play 项目解耦。
https://stackoverflow.com/questions/12591457/
相关文章:
json - 为什么 RestTemplate 不将响应表示绑定(bind)到 PagedResou
javascript - D3.js:使用图像(在数据中指定文件名)作为轴上的刻度值
javascript - 如何使用 JSON.NET 通过 ASP.NET MVC 传递 JSON
sql - Postgresql 中的 `->>` 和 `->` 有什么区别?
ruby-on-rails-3 - 如何使用 ActiveModel::Serializers 为同
javascript - 有没有一种快速的方法可以在文本编辑器中将 JavaScript 对象转换为