Scala Play 解析 json 流 (ndjson)

大卫·蒙塔尼奥

我有一个生成application/stream+jsonapplication/x-ndjsonhttp://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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章