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