如何将Play 2.4 json流示例翻译为Play 2.5

时间:2016-09-10 06:03:06

标签: playframework akka-stream

在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对象的位置?

1 个答案:

答案 0 :(得分:2)

您似乎正在使用play-iteratees-extras库,顾名思义,它是特定于iteratee的。您可以在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