【发布时间】:2014-03-28 23:42:35
【问题描述】:
在我们的项目中,我们使用ReactiveMongo 和Play 2.2.1。
问题是,ReactiveMongo返回的Enumerator[A]形式的数据流实际上是一个值对象流,没有逗号分隔,也没有流开始和结束注解,这可以被视为数组打开和关闭语句。
这会给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)
)
这行得通,但感觉就像在发明轮子。
对于这个常见问题,有更好的解决方案吗?
【问题讨论】:
-
不敢相信没有更好的解决方案:/
标签: scala playframework-2.0 enumerator iterate reactivemongo