2017-06-10 3 views
0

Ich habe ein Problem der großen HTTP-Antwort mit einem JSON-Platte, wo nur Teil ist von Interesse. Ich kann die Antwortstruktur nicht ändern. hier ist ein BeispielStreaming riesigen JSON mit Akka Stream

{ 
    "searchString": "search", 
    "redirectUrl": "", 
    "0": { 
    "numRecords": 123, 
    "refinementViewModelCollector": {}, 
// Lots of data here 
    "results": [ 
     { 
     "productCode": "123", 
     "productShortDescription": "Desc", 
     "brand": "Brand", 
     "productReview": { 
      "reviewScore": 0 
     }, 
     "priceView": { 
      "salePriceDisplayable": false, 
     }, 
     "productImageUrl": "url", 
     "alternateImageUrls": [ 
      "url1" 
     ], 
     "largeProductImageUrl": "url4", 
     "videoUrl": "" 
     }, 
     { 
     "productCode": "124", 
     "productShortDescription": "Desc", 
     "brand": "Brand", 
     "productReview": { 
      "reviewScore": 0 
     }, 
     "priceView": { 
      "salePriceDisplayable": false, 
     }, 
     "preOrder": false, 
     "productImageUrl": "url", 
     "alternateImageUrls": [ 
      "url1" 
     ], 
     "largeProductImageUrl": "url4", 
     "videoUrl": "" 
     } 
    ] 
    //lots of data here 
    } 
} 

Mein Punkt von Interesse Einträge in results Jason Array, aber die sitzen in der Mitte der json

ich ein kleines Spiel WS-Client wie folgt erstellt:

val wsClient: WSClient = ??? 
val ret = wsClient.url("url").stream() 
ret.flatMap { response => 
    response.body.via(JsonFraming.objectScanner(1024)) 
    .map(_.utf8String) 
    .runWith(Sink.foreach(println)) 
} 

dies wird nicht funktionieren, weil es ganze Json Platte als Json Objekt nehmen wird. Ich muss einige Daten überspringen, bis "results": Eintrag im Stream erscheinen, dann starten Sie die Analyse von Einträgen und überspringen Sie den Rest. Irgendwelche Ideen, wie man das macht?

Antwort