在我們的項目中,我們使用ReactiveMongo
和Play 2.2.1
。如何從ReactiveMongo返回播放器中的JSON枚舉器2
問題是,以Enumerator[A]
形式傳輸的數據流,由ReactiveMongo
返回實際上是一個價值對象流,它不以逗號分隔,並且沒有流開始和結束註釋,它們可以是視爲陣列開放和關閉聲明。
這爲JSON
消費者JS client
一個問題,因爲預期的格式是 [A1,A2, ...]
所以我們在籃球跳下,並改變了我們的Enumeratee[A]
到Enumerator[String]
,有檢查,如果它是第一個元素,或不:
var first:Boolean = true
val aToStrs = (as.map(a => {
if(first) {
first = false;
Json.stringify(Json.toJson(a))
} else {
"," + Json.stringify(Json.toJson(a))
}
}))
Ok.chunked(
Enumerator.enumInput(Input.El("[")) andThen
aToStrs andThen
Enumerator.enumInput(Input.El("]")) andThen
Enumerator.enumInput(Input.EOF)
)
這很有效,但感覺就像發明了輪子。
有沒有更好的解決方案,對於這個常見問題?
不能相信有沒有更好的解決方案:/ – Jean