我正在使用一个API,它在响应中的多个图层上公开一个对象。例如,对于一些反应,我们得到一个:播放Json递归读取
{
"error": {
"code": "123",
"description": "Description"
}
}
但在其他情况下,它的响应与:
{
"data": [
{
"message_id": "123",
"error": {
"code": "123",
"description": "Description"
}
}
]
}
在这两种情况下,错误的对象是相同的,在这两种情况下,我并不真正关心关于有效载荷的其余部分。我希望能使用\\递归JsPath操作,但是实施以下失败:
case class ErrorMessage(code: String, description: String)
implicit val errorMessageFormat = Json.format[ErrorMessage]
case class ErrorResponse(errors: Seq[ErrorMessage])
implicit val errorResponseFormat: Format[ErrorResponse] = Format(
(__ \\ "error").read[Seq[ErrorMessage]].map(ErrorResponse),
(__ \ "errors").write[Seq[ErrorMessage]].contramap((r: ErrorResponse) => r.errors)
)
这给出了一个错误:
JsError(List((//error,List(ValidationError(List(error.expected.jsarray),WrappedArray())))))
我明白为什么:该(__ \\ "error")
返回Seq[JsValue]
,在那里我的阅读电话预计为JsArray
。
这是否有一个很好的方法?
它看起来像你试图读错误'作为一个数组,但你举例来说,它是一个对象。 – pedrofurla
@healsjnr你张贴无效的JSON这是链接,看到JSON数据http://jsonviewer.stack.hu/ – Amitsharma
@pedrofurla是的,这就是我想解决的。我希望能够通过执行'(JsArray(__ \\“error”)),将'Seq [JsValue]'转换为'JsArray''',但没有快乐。 – healsjnr