2012-08-16 8 views
10

現在、スカラとモンゴブを学習しています!フレームワークなので、私は物事の周りに頭を浮かべるようにあらゆる種類の間違いをしています。現時点では、以下のように、casbahを介してmongodbクエリから返されたデータベースオブジェクトのリストを返すscalaオブジェクトがあります。他の場所で私のコードでスカバ/遊びでcasbah mongodbリストをjsonに変換するには

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] 

私の質問は - 出力用のJSONにcom.mongodb.casbah.Imports.DBObjectのリストを変換する正しい方法は何ですか?

EDIT:明確にするために

、私が本当にやりたいことは、私がAであるものを持っている私は

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

とJSON配列を返す必要があり

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

を試すことができていますが、 'Json.toJsonを試してみました() '関数? (http://www.playframework.org/documentation/2.0.2/ScalaJson) –

+1

なぜあなたは本当にjsonとしてデータを変換する必要がありますか?それはdbのjsonとして格納されています(実際はbsonです)。本当に同じバックが必要ですか?私はあなたの目的の構造に基づいてオブジェクトにデータをコピーし、jsonにシリアル化したいと思うかもしれないと思う... – aishwarya

+1

私はそれをJSONとして出力する必要があります。 – Roger

答えて

4

を書くことができるのと同じように

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

のと同じです恐ろしい解決策は次のとおりです。

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

確かに良い方法でしょうか?

+0

こんにちはRoger、あなたはcasbah DBObjectをJsValueで再生するためのより良い方法を見つけましたか? – teo

+0

'result'を取得した後、そのキー値フィールドをどのようにマップに埋め込みますか? –

+0

これは実際に素晴らしいアイデアです!パフォーマンスが重要ではない場合(たとえば、きれいな印刷ではそうではありません)、これは完璧です。ありがとう。 – akauppi

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

}

7

次あなたはこれがあなたのアラート

関連する問題