我正在学习scala和mongodb并使用该剧!框架,所以当我理解事物时,我犯了各种各样的错误。目前我有一个scala对象,它返回一个通过casbah从mongodb查询返回的数据库对象列表,如下所示;
object Alerts {
def list() : List[DBObject]= {
val collection = MongoDatabase.collection;
val query = MongoDBObject.empty
val order = MongoDBObject("Issue Time:" -> -1)
val list = collection.find(query).sort(order).toList
list
}
... }
在我的代码的其他地方,我希望在Json中输出对象列表 - 所以我有;
val currentAlerts = Alerts.list()
我想写的东西是这样的;
val resultingJson = currentAlerts.toJson
但是当我这样做时,我可以理解得到以下错误;
value toJson is not a member of List[com.mongodb.casbah.Imports.DBObject]
我的问题是 - 将com.mongodb.casbah.Imports.DBObject列表转换为Json输出的正确方法是什么?
编辑:
为清楚起见,我真正想做的是相当于
val listInJson = collection.find(query).sort(order).toJson
和我写的一样
val listAsString = collection.find(query).sort(order).toString
答案 0 :(得分:7)
你可以尝试
com.mongodb.util.JSON.serialize(Alerts.list())
这应该返回带有警报的JSON数组
答案 1 :(得分:5)
我有以下
def service() = Action {
// connect
val collection = MongoConnection()("someDB")("someCollection")
// simply convert the result to a string, separating items with a comma
// this string goes inside an "array", and it's ready to hit the road
val json = "[%s]".format(
collection.find(someQuery).toList.mkString(",")
)
Ok(json).as("application/json")
}
答案 2 :(得分:4)
我有一个可怕的解决方案如下;
val currentAlerts = Alerts.list()
var jsonList : List[JsValue] = Nil
// Iterate over the DBObjects and use to String to convert each to JSON
// and then parse that back into the list so we can use toJson on it later.
// MAD, but works.
for (dbObject <- currentAlerts) {
jsonList ::= Json.parse(dbObject.toString)
}
val result = Json.toJson(jsonList)
Ok(result).as("application/json")
肯定有更好的方法吗?