簡體   English   中英

Scala 播放解析 json stream (ndjson)

[英]Scala Play parse json stream (ndjson)

我有一個產生application/stream+jsonapplication/x-ndjsonhttp://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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM