Как преобразовать список казба mongodb в json в scala/play

Я изучаю scala и mongodb в настоящее время и использую игру! рамки, поэтому я делаю всевозможные ошибки, когда я обдумываю вещи. В настоящее время у меня есть объект scala, который возвращает список объектов базы данных, возвращенных из запроса mongodb через casbah, следующим образом:

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 для вывода?

EDIT:

Для ясности, что я действительно хочу сделать, это эквивалент

val listInJson = collection.find(query).sort(order).toJson

Таким же образом, что я МОЖЕТ писать

val listAsString = collection.find(query).sort(order).toString

Ответ 1

Вы можете попробовать

com.mongodb.util.JSON.serialize(Alerts.list())

Это должно возвращать массив JSON с вашими оповещениями

Ответ 2

У меня есть следующее

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 ready to hit the road
 val json = "[%s]".format(
  collection.find(someQuery).toList.mkString(",")
 )

 Ok(json).as("application/json")

}

Ответ 3

У меня есть то, что является ужасным решением следующим образом:

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

Конечно, должен быть лучший способ?