2014-09-18 9 views
12

के साथ मानचित्र [स्ट्रिंग, कोई भी] सीरियलाइज़ करें मैं स्प्रे-जेसन के साथ मानचित्र [स्ट्रिंग, कोई भी] क्रमबद्ध कैसे करूं? मैंस्प्रे जेसन

val data = Map("name" -> "John", "age" -> 42) 
import spray.json._ 
import DefaultJsonProtocol._ 
data.toJson 

यह Cannot find JsonWriter or JsonFormat type class for scala.collection.immutable.Map[String,Any] कहता है।

उत्तर

21

यहाँ एक अंतर्निहित कनवर्टर मैं इस कार्य को करने के लिए इस्तेमाल किया है:

implicit object AnyJsonFormat extends JsonFormat[Any] { 
    def write(x: Any) = x match { 
     case n: Int => JsNumber(n) 
     case s: String => JsString(s) 
     case b: Boolean if b == true => JsTrue 
     case b: Boolean if b == false => JsFalse 
    } 
    def read(value: JsValue) = value match { 
     case JsNumber(n) => n.intValue() 
     case JsString(s) => s 
     case JsTrue => true 
     case JsFalse => false 
    } 
    } 

यह स्प्रे उपयोगकर्ता समूह में this post से अनुकूलित किया गया था, लेकिन मैं नहीं मिल सका और नेस्टेड दृश्यों और मानचित्र लिखने की जरूरत नहीं थी जेसन को तो मैंने उन्हें बाहर निकाला।

+2

बहुत बढ़िया है, यह मेरे लिए काम करता है। मुझे बस यह सुनिश्चित करने की ज़रूरत है कि मैं इस ऑब्जेक्ट को अन्य जेसनफॉर्मेट इम्प्लिकेट्स से पहले घोषित करता हूं जो – Bogdan

+1

पर निर्भर करता है आपके कोड में '}' गायब है। – dividebyzero

+0

दरअसल। अपडेट किया गया। – Gangstead

5

एक अन्य विकल्प है, जो अपने मामले में काम करना चाहिए,

data.parseJson.convertTo[Map[String, JsValue]] 
+0

मुझे यह पसंद है कि आपने इसका उल्लेख किया है, क्योंकि कई मामलों में मूल्यों के लिए 'JsValue' का उपयोग करना पड़ सकता है लोगों के लिए पर्याप्त हो। स्प्रे.जेसन मानसिकता, इमो, किसी भी को संभालने की तुलना में यह भी अधिक है। – akauppi

+2

'डेटा' प्रकार का है 'मानचित्र [स्ट्रिंग, कोई भी]' - इसे 'parseJson' विधि बनाने के लिए मुझे क्या आयात करना चाहिए? – mirelon

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