反序列化无名称的json

3

我正在使用Scala和json4s来消费JSON。为了反序列化,我调用了org.json4s.native.JsonMethods.parse和ExtractableJsonAstNode.extract方法。 以下是JSON文件的一部分:

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

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

1个回答

0

我认为你无法将这样的JSON解析成Case Class。除非你为其编写自定义反序列化器,然后你可以自行决定。

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: JValueOuter(
      (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]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接