Scala Play 解析 json 流 (ndjson)

Scala Play parse json stream (ndjson)

我有一个生成 application/stream+jsonapplication/x-ndjson (http://ndjson.org/) 的端点。

我正在尝试通过 Play 使用此端点。具体来说,我使用了 WSResponse.json 但它似乎只解析返回的第一项。我也试过 WSResponse.validate[Seq[JsValue]] 但失败 JsonValidationError.

是否可以使用 Play 解析此输出并获得 Seq 甚至 Source (akka-streams)?

我设法根据 cchantep 的评论创建了一个解决方案

使用 akka-streams framing,特别是 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]],可以根据需要对其进行操作。