我有一个文件,其中包含以下JSON对象数组:
getX()
在Play Framework 2.x中,我将定义一个隐式的Reads转换器以读取文件并将其转换为Scala结构:
[
{
"type": "home",
"number": 1111
},
{
"type": "office",
"number": 2222
},
{
"type": "mobile",
"number": 3333
}
]
Scala案例类定义为:
implicit val implicitRead : Reads[MyClass] = (
(JsPath \ "type").read[String] and
(JsPath \ "number").read[Int]
) (MyClass.apply _)
并使用以下命令解析JSON:
case class MyClass (myType: String, myNumber: Int)
现在,我的问题是我只知道val json = // file record content
json.validate[MyClass] match {
case s: JsSuccess[MyClass] => {
val myObject: MyClass = s.get
// do something with myObject
}
case e: JsError => {
// error handling flow
}
而不是runtime
的JSON文件的结构。可以在compilation time
上建立隐式Reads转换器和case类吗?
答案 0 :(得分:0)
直接将case classes
与play-json
一起使用:
将case class
更改为:
case class MyClass (`type`: String, number: Int)
将json-formatter
添加到伴随对象:
object MyClass {
implicit val format = Json.format[MyClass]
}
validate
函数现在看起来:
val myClass = // file record content
json.validate[Seq[MyClass]] match {
case JsSuccess(myClasses, _) => myClasses
case e: JsError => // handle error case
}
这就是您所需要的。如果您对参数名称不满意,可以使用Wrapper案例类。