我如何将这个 Play 2.4 json 流示例转换为 Play 2.5
How can i translate this Play 2.4 json stream example to Play 2.5
在 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 对象的位置?
您似乎在使用 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.
在 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 对象的位置?
您似乎在使用 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.