gpt4 book ai didi

json - akka-stream - 如何在流/图中以不同方式处理流的最后一个元素

转载 作者:行者123 更新时间:2023-12-02 07:47:54 25 4
gpt4 key购买 nike

我正在尝试实现一个 Akka Streams Flow ,它将 JSON 对象流转换为单个 JSON 对象数组的流。我可以使用 Concat 在前面添加“[”,在后面添加“]”,以及使用 Zip 在元素之间插入逗号,但我不知道如何不插入最后的逗号。

到目前为止我的代码是:

trait JsonStreamSupport {

protected def toJsonArrayString[T : Writes] = Flow[T].map(Json.toJson(_)).map(_.toString()).via(jsonArrayWrapper)


private[this] val jsonArrayWrapper: Flow[String, String, NotUsed] = Flow.fromGraph(GraphDSL.create() { implicit b =>
import GraphDSL.Implicits._
val start = Source.single("[")
val comma = Source.repeat(",")
val end = Source.single("]")
val concat = b.add(Concat[String](3))
val zip = b.add(Zip[String,String])

comma ~> zip.in1
start ~> concat.in(0)
zip.out.map({case (msg,delim) => msg + delim}) ~> concat.in(1)
end ~> concat.in(2)
FlowShape(zip.in0, concat.out)
})
}

当前输出为:
[{"key":"value},{"key","value"},]
但我需要它是
[{"key":"value},{"key","value"}](没有最后的逗号),
其中数组的每个元素仍然是数组的不同元素例如,可以通过分块 HTTP 单独发送流。

最佳答案

刚刚发现 intersperse 这正是您所需要的,并且比我最初建议的要简单得多:

http://doc.akka.io/api/akka/2.4.4/index.html#akka.stream.scaladsl.Flow@intersperse[T%3E:Out]%28start:T,inject:T,end:T%29:FlowOps.this.Repr[T]

关于json - akka-stream - 如何在流/图中以不同方式处理流的最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37125603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com