我有两个版本的Scala编译器2.11.12和2.12.4。我有一个代码,它覆盖了json协议的读写方法。代码是这样的。
implicit lazy val abcJsonProtocol: RootJsonFormat[XYZ] = new
RootJsonFormat[XYZ] {
override def write(obj: XYZ): JsValue = {
val baseJson =
JsObject(
“abc” -> obj.efg.toJson,
“ikj” -> obj.mno.toJson
)
obj
.map(value => JsObject(baseJson.fields + (“wxy” ->
value.toJson)))
.getOrElse(baseJson)
}
override def read(value: JsValue): XYZ = {
val jsObject = value.asJsObject
jsObject.getFields("abc",
"kJ") match {
case Seq(efg, mno) =>
XYZ(
efg = efg.convertTo[String],
mno = mno.convertTo[String],
)
}
}
}
错误就是这样的
illegal start of simple expression
[error] )
[error] ^
')' expected but '}' found.
[error] }
[error] ^
编译仅在2.11.12版本中失败,并在后一版本中传递 提前谢谢。
答案 0 :(得分:1)
您的案例类
case class XYZ(efg: String, mno: String)
然后,定义类似这样的协议。
import spray.json._
implicit object XYZFormat extends RootJsonFormat[XYZ] {
// writer function
def write(obj: XYZ): JsValue = JsObject(
"efg" -> JsString(obj.efg),
"mno" -> JsString(obj.mno)
)
// reader function
def read(json: JsValue): XYZ =
json.asJsObject.getFields("efg", "mno") match {
case Seq(JsString(efg), JsString(mno)) => XYZ(efg, mno)
case _ => throw DeserializationException("Not valid XYZ model")
}
}