json - 反序列化没有名称的json

标签 json scala json4s

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

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

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

最佳答案

我认为您无法将此类 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]

关于json - 反序列化没有名称的json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28235978/

相关文章:

java - jackson 资源访问异常 : I/O error: Unrecognized field

javascript - 如何从 collection.json 中获取音频文件

java - Codehaus Jackson JSON 数据到 POJO 无法从 START_ARRAY token 反序列化实例...

scala - 在哪里下载 Scala RPM 或 DEB 包?

java - 我如何将表导入另一个类(/对象??)以便我可以在另一个类/对象中对其运行查询? [圆滑 3.0][scala]

scala - 如何在 json4s 反序列化中禁止 null 作为值

scala - 如何使用json4s生成漂亮的JSON?

java - 在 Json 中映射具有公共(public)属性和动态名称的数组

scala - 如何使用抽象类型的类型约束

scala - 在json4s中提取多态类型