circe を使用すると、ケース クラスで Json を簡単にデコードできます。
import io.circe._, io.circe.generic.auto._, io.circe.parser._, io.circe.syntax._
case class Bar(xs: List[String])
scala> decode[Bar]("{\"xs\":[\"a\",\"b\"]}")
res2: Either[io.circe.Error,Bar] = Right(Bar(List(a, b)))
scala> decode[Bar]("{\"xs\":[\"a\",\"b\"],\"addedField\":true}")
res3: Either[io.circe.Error,Bar] = Right(Bar(List(a, b)))
しかし、すべてのフィールドが使用され、結果にマップされているかどうかを確認する方法がわかります。
現在、一部の情報が失われているかどうかを確認する方法の 1 つは、結果を json に再変換し、json を比較することです (Json4 を使用)。
scala> val Diff(_,_,removed) = parse(input) diff parse(result.asJson.noSpaces)
removed: org.json4s.JsonAST.JValue = JObject(List((addedField,JBool(true))))
val noLoss = removed == JNothing
circe で直接それを行う方法はありますか?