2012-08-16 15 views
10

में कनवर्ट करने के लिए कैसे मैं वर्तमान में स्केल और मोंगोडब सीख रहा हूं और नाटक का उपयोग कर रहा हूं! ढांचे, इसलिए मैं सभी प्रकार की गलतियों को कर रहा हूं क्योंकि मुझे चीजों के चारों ओर अपना सिर मिलता है। वर्तमान में मेरे पास एक स्कैला ऑब्जेक्ट है जो निम्नानुसार कैसबा के माध्यम से एक मोंगोडब क्वेरी से लौटाए गए डेटाबेस ऑब्जेक्ट्स की एक सूची देता है;कैसाबा मोंगोडब सूची को जेएसएन में स्कैला/प्ले

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 की एक सूची कन्वर्ट करने के लिए है?

संपादित करें:

स्पष्टता के लिए, क्या मैं वास्तव में क्या करना चाहते हैं

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

के बराबर उसी तरह है कि मैं

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

आप 'Json.toJson कोशिश की() 'समारोह? (http://www.playframework.org/documentation/2.0.2/ScalaJson) –

+1

अच्छी तरह से आपको डेटा को जेसन के रूप में बदलने की ज़रूरत क्यों है? यह डीबी में जेसन के रूप में संग्रहीत है (वास्तव में अच्छी तरह से बासन), क्या आपको वास्तव में एक ही पीठ की आवश्यकता है? मुझे लगता है कि आप सिर्फ अपनी वांछित संरचना के आधार पर किसी ऑब्जेक्ट में डेटा कॉपी करना चाहते हैं और फिर इसे जेसन में क्रमबद्ध कर सकते हैं ... – aishwarya

+1

मुझे इसे वेबसाइंस के उपभोग के लिए जेएसओएन के रूप में आउटपुट करने की आवश्यकता है। – Roger

उत्तर

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

निश्चित रूप से एक बेहतर तरीका होना चाहिए?

+0

हे रोजर, क्या आपने कभी भी Casbah DBObject को Play's JsValue में परिवर्तित करने का बेहतर तरीका खोजा है? – teo

+0

'परिणाम' प्राप्त करने के बाद, आप अपने कुंजी-मूल्य फ़ील्ड को मानचित्र में कैसे पॉप्युलेट करेंगे? –

+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

आप कोशिश कर सकते हैं

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

यह आपके अलर्ट के साथ एक JSON सारणी लौट जाना है

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^