Чтение внутреннего объекта с Цирцеей

Я пытаюсь прочитать внутренний объект в json, который я получаю. Мне нужно получить этот внутренний объект как есть и вставить его в Mongo.

{
  "order" : {
    "customer" : {
      "name" : "Custy McCustomer",
      "contactDetails" : {
        "address" : "1 Fake Street, London, England",
        "phone" : "0123-456-789"
      }
    },
    "items" : [
      {
        "id" : 123,
        "description" : "banana",
        "quantity" : 1
      },
      {
        "id" : 456,
        "description" : "apple",
        "quantity" : 2
      }
    ],
    "total" : 123.45
  }
}

person FranGoitia    schedule 21.04.2017    source источник
comment
О каком внутреннем объекте вы говорите?   -  person mfirry    schedule 21.04.2017
comment
Да, извини. В этом примере это будет клиент или товары.   -  person FranGoitia    schedule 23.04.2017
comment
Подождите... это пример на странице документации circe optics?   -  person mfirry    schedule 23.04.2017
comment
Да. Я должен сделать это с другим json, очевидно, но это та же проблема.   -  person FranGoitia    schedule 24.04.2017


Ответы (1)


Основываясь на исходном примере, вы должны развернуть файл Decoder. Я не эксперт по циркам, я только вчера использовал его в первый раз, но я думаю, что downField должен работать.

case class Item(id: String, description: String, quantity: Int)
case class InnerObject(items: List[Item])

object InnerObject {
  implicit val decode: Decoder[InnerObject] = Decoder.instance(c =>
    c.downField("items").as[InnerObject]
  )
}
person flavian    schedule 21.04.2017