我有一个生成application/stream+json或application/x-ndjson (http://ndjson.org/)的端点。
我正在尝试使用Play来使用这个端点。具体地说,我使用了WSResponse.json,但它似乎只解析返回的第一个项。我也尝试过WSResponse.validate[Seq[JsValue]],但在JsonValidationError上失败了。
是否可以使用Play解析此输出并获得Seq甚至Source (akka-streams)?
发布于 2021-02-16 07:34:02
我设法根据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]]。
https://stackoverflow.com/questions/66127919
复制相似问题