无名称反序列化json

时间:2015-01-30 12:30:16

标签: json scala json4s

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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]