Update case class from incomplete JSON with Argonaut or Circe

前端 未结 2 2140
自闭症患者
自闭症患者 2021-02-20 05:19

I need to create an updated instance from a case class instance (with any needed DecodeJsons implicitly derived), given an incomplete json (some fields missing). Ho

2条回答
  •  温柔的废话
    2021-02-20 05:58

    For the sake of completeness: support for "patching" instances like this has been provided in circe since the 0.2 release:

    import io.circe.jawn.decode, io.circe.generic.auto._
    
    case class Person(name: String, age: Int)
    
    val person = Person("mr complete", 42)
    val incompletePersonJson = """{"name":"mr updated"}"""
    
    val update = decode[Person => Person](incompletePersonJson)
    

    And then:

    scala> println(update.map(_(person)))
    Right(Person(mr updated,42))
    

    My original blog post about this technique uses Argonaut (mostly since I wrote it a couple of months before I started working on circe), and that implementation is available as a library, although I've never published it anywhere.

提交回复
热议问题