Я пытаюсь проанализировать вложенный объект JSON с библиотекой Circe.Я хотел бы сопоставить его с классом плоского регистра, игнорируя некоторые поля.
import io.circe.generic.auto._
import io.circe.{Decoder, Encoder, HCursor, Json}
val jsonString = """{
"parent" : {
"name" : "title",
"items" : [
{
"foo" : "",
"attrs" : {
"attrA" : "",
"attrB" : ""
}
},
{
"foo" : "",
"attrs" : {
"attrA" : "",
"attrB" : "",
"attrC" : ""
}
}]
}
}"""
// Notice I don't care about "attrC"
case class Item(foo: String, attrA: String, attrB: String)
case class Parent(name: String, items: List[Item])
implicit val testDecoder: Decoder[Item] = Decoder.instance { c =>
val itemsC = c.downField("parent").downField("items")
for {
foo <- itemsC.get[String]("foo")
a <- itemsC.downField("attrs").get[String]("attrA")
b <- itemsC.downField("attrs").get[String]("attrB")
} yield Item(foo, a, b)
}
val decodingResult = parser.decode[Parent](jsonString)
результат: Either[io.circe.Error,Parent] = Left(DecodingFailure(Attempt to decode value on failed cursor, List(DownField(name))))