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 に答える