【问题标题】:How can i translate this Play 2.4 json stream example to Play 2.5如何将此 Play 2.4 json 流示例翻译为 Play 2.5
【发布时间】:2016-09-22 17:45:18
【问题描述】:

在 Play 2.4 中我可以写:

import play.api.libs.json._
import play.extras.iteratees._
val jsonStream: Enumerator[JsObject] =
        enumerator &>
        Encoding.decode() &>
        Enumeratee.grouped(JsonIteratees.jsSimpleObject)

从 Array[Byte] 流转到 JsObject 流。 但是现在在 2.5 中,我想做完全相同的事情,但使用 akka-stream 但找不到关于 akka-stream 如何执行上述代码的任何信息?

上面的代码如何知道在哪里将流拆分成每个 Json 对象?

【问题讨论】:

    标签: playframework akka-stream


    【解决方案1】:

    您似乎正在使用play-iteratees-extras 库,顾名思义,它是特定于迭代的。您可以在 Play 2.5.6 及更高版本(使用 Akka Streams 2.4.9)上执行类似的操作:

    import akka.util.ByteString
    import akka.http.scaladsl.common.EntityStreamingSupport
    import akka.stream.scaladsl.Source
    
    val byteSource = Source.single(ByteString.fromString("""[{"hello": "world"}]"""))
    
    val jsonFraming = EntityStreamingSupport.json(Int.MAX_VALUE)
    
    val jsonStream: Source[JsObject, akka.NotUsed] = byteSource
      .via(jsonFraming.framingDecoder)
      .map(bytes => Json.parse(bytes.toArray).as[JsObject])
    

    目前只会解析来自数组的 JSON 对象流。如果您想要更完整的流解析支持,请查看akka-streams-json

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多