我有一个生成application/stream+json
或application/x-ndjson
(http://ndjson.org/)的端点。
我正在尝试使用 Play 使用此端点。具体来说,我已经使用过,WSResponse.json
但它似乎只解析返回的第一个项目。我也试过,WSResponse.validate[Seq[JsValue]]
但它失败了JsonValidationError
。
是否可以使用 Play 解析此输出并获得一个Seq
甚至一个Source
(akka-streams)?
我设法根据 cchantep 的评论创建了一个解决方案
使用akka-streams framing,特别是该类JsonFraming
将做到这一点。我最终得到了这样的结果:
// declaration or injection of WSClient
ws.url(url)
.post(body)
.flatMap { response =>
for {
jsonStrs <- response.bodyAsSource.via(JsonFraming.objectScanner(Int.MaxValue))
.runFold(Seq.empty[String]) {
case (acc, entry) => acc ++ Seq(entry.utf8String)
}
} yield {
jsons.map(Json.parse)
}
}
上面的代码将生成Future[Seq[JsValue]]
可以根据需要进行操作的a 。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句