3

我是使用 json 的 Scala na json4s。为了反序列化,我调用了 org.json4s.native.JsonMethods.parse 和 ExtractableJsonAstNode.extract 方法。这是 json 文件的一部分:

     "": {
        "atribute1": "v1",
        "instanceId": "i",
      },

它包含没有名称的属性。案例类中的字段名称应该是什么才能成功反序列化属性?

4

1 回答 1

0

我认为您无法将此类 json 解析为案例类。除非你为它做一个自定义的反序列化器,然后你可以自己决定。

import org.json4s.{JValue, CustomSerializer, DefaultFormats}
import org.json4s.native.JsonMethods
import org.json4s.JsonDSL._
import org.json4s._

case class Outer(value: Inner, other: String)
case class Inner(atribute1: String, instanceId: String)

object Formats extends DefaultFormats {
  val outerSerializer = new CustomSerializer[Outer](implicit format ⇒ (
    { case j: JValue ⇒ Outer(
      (j \ "").extract[Inner],
      (j \ "other").extract[String]
    )},
    { case a: Outer ⇒
      ("" → Extraction.decompose(a.value)) ~
      ("other" → a.other)
    })
  )

  override val customSerializers = List(outerSerializer)
}

implicit val formats = Formats

val json = """
    {
      "": {
        "atribute1": "v1",
        "instanceId": "i",
      },
      "other": "1"
    }
  """

JsonMethods.parse(json).extract[Outer]
于 2015-03-30T06:18:24.450 回答