[英]Scala Play parse json stream (ndjson)
我有一個產生application/stream+json
或application/x-ndjson
( http://ndjson.org/ )。
我正在嘗試使用 Play 使用此端點。 具體來說,我使用WSResponse.json
但它似乎只解析返回的第一個項目。 我也試過WSResponse.validate[Seq[JsValue]]
但它失敗了JsonValidationError
。
是否可以用 Play 解析這個 output 並獲得Seq
甚至是Source
(akka-streams)?
我根據 cchantep 的評論創建了一個解決方案
使用akka-streams 框架,特別是 class 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]]
,可以根據需要對其進行操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.