2016-05-09 11 views
6

Bir JSON nesnesi akışını tek bir JSON nesnesi dizisine dönüştürecek olan bir Akka Streams Flow kullanmaya çalışıyorum . Concat'u, "[" önce ve "]" sonra eklemek için Zip öğelerinin arasına virgül eklemek için kullanabilirim, ancak son virgül eklenemediğini anlayamıyorum.akka-stream - Akış/Grafikte farklı bir akışın son öğesi nasıl işlenir

var bugüne kadar kodudur:

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) 
    }) 
} 

Şu çıktısı:
[{"key":"value},{"key","value"},]
ama
[{"key":"value},{"key","value"}] (son virgül olmadan),
olması gereken yere her eleman dizi hala akışın ayrı bir öğesidir, bu yüzden örneğin ayrı ayrı yığınlanmış HTTP üzerinden gönderilebilir.

cevap

İlgili konular