非法开始简单表达Scala

时间:2018-03-08 09:23:53

标签: json scala spray

我有两个版本的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版本中失败,并在后一版本中传递 提前谢谢。

1 个答案:

答案 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")
        }
    }