使用 circe,在 case classes 中很容易解码 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)))
但我可以看到一种方法来检查所有字段是否已在结果中使用和映射。
目前,检查某些信息是否丢失的一种方法是将结果重新转换为 json 并区分 jsons(使用 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?