例如假设我有
case class Test(a: String, b: String)
...
implicit val testFormat = jsonFormat2(Test.apply)
和一个带有额外c
字段的json:
val test = "{\"a\": \"A\", \"b\": \"B\", \"c\": \"C\"}"
然后我想找到一种方法(config / param / whatever)来进行以下行抛出和异常:
test.parseJson.convertTo[Test]
通过阅读源代码和github文档来解决这个问题非常困难。
答案 0 :(得分:0)
我没有在库中看到提供该功能的任何内容,因此我创建了一个包装器,在将读取调用委托给提供的格式化程序之前快速检查存在的字段数。
case class StrictRootFormat[T](format: RootJsonFormat[T], size: Int) extends RootJsonFormat[T] {
def read(json: JsValue): T = {
if(json.asJsObject.fields.size > size) deserializationError("JSON has too many fields: \n " + json.toString())
else format.read(json)
}
def write(obj: T): JsValue = format.write(obj)
}
用法:
implicit val testFormat = StrictRootFormat(jsonFormat2(Test.apply), 2)
您可以增强读取实现,这样就不需要提供“size”参数。