我正在编写一个需要从JSON序列化和反序列化的Scala应用程序.一些JSON对象有超过22个字段,所以我不能使用case类(我也不能改变格式).我能够找到的所有Scala JSON库只能使用case类(而不是普通类)工作.
鉴于此,将大型JSON对象(具有超过22个字段)反序列化为Scala非案例类的最简单方法是什么?它不一定是完全自动的,但理想情况下我正在寻找比反序列化为Map [String,Any]并手动完成所有操作更少痛苦的事情.
更新:幸运的是,现在可以使用 Json4s 和 Jackson 使用字段序列化器来完成我想要的操作,如下所示:
implicit val formats = DefaultFormats + FieldSerializer[MyNonCaseClass]()
val myNonCaseClassObject = Serialization.read[MyNonCaseClass](jsonString)
Run Code Online (Sandbox Code Playgroud)
根据下面的要求,这是一个更完整的示例:
import org.json4s.jackson.Serialization
import org.json4s._
import scala.util.Try
object JSONUtil {
implicit val formats = DefaultFormats + FieldSerializer[MyNonCaseClass]() + FieldSerializer[MyOtherNonCaseClass](ignore("someUnwantedFieldName") orElse ignore("anotherFieldToIgnore")) + ...
def toJSON(objectToWrite: AnyRef): String = Serialization.write(objectToWrite)
def fromJSONOption[T](jsonString: String)(implicit mf: Manifest[T]): Option[T] = Try(Serialization.read(jsonString)).toOption
}
Run Code Online (Sandbox Code Playgroud)
那么用法就是:
val jsonString = JSONUtil.toJSON(myObject)
val myNewObject: Option[MyClass] = JSONUtil.fromJSONOption[MyClass](aJsonString)
Run Code Online (Sandbox Code Playgroud)
对于要序列化的每个非案例类,您都需要一个 FieldSerializer。此外,在定义类时,JSON 中可能缺少的所有内容都需要定义为选项。
科学技术试验:
"org.json4s" %% "json4s-jackson" % "3.2.6"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4837 次 |
| 最近记录: |