我是Scala na json4s消耗json。要反序列化我调用org.json4s.native.JsonMethods.parse和ExtractableJsonAstNode.extract方法。 这是json文件的一部分:
"": {
"atribute1": "v1",
"instanceId": "i",
},
它包含没有名称的属性。 在case类中成功反序列化属性应该是什么字段名?
答案 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]