का उपयोग कर जेसन स्ट्रिंग को कॉम्पैक्ट करने के लिए मैं वर्तमान में विभिन्न डेटा स्रोतों से कुछ मीट्रिक निकालने और Map[String,Any]
के मानचित्र में संग्रहीत कर रहा हूं जहां कुंजी मीट्रिक नाम से मेल खाती है और मान मीट्रिक मान से मेल खाता है । मुझे इसे कम या ज्यादा सामान्य होने की आवश्यकता है, जिसका अर्थ है कि मूल्य प्रकार आदिम प्रकार या प्राचीन प्रकार की सूचियां हो सकते हैं।मानचित्र [स्ट्रिंग, कोई भी] json4s
मैं इस मानचित्र को JSON- स्वरूपित स्ट्रिंग में क्रमबद्ध करना चाहता हूं और इसके लिए मैं json4s
लाइब्रेरी का उपयोग कर रहा हूं। बात यह है कि यह संभव प्रतीत नहीं होता है और मुझे इसके लिए एक संभावित समाधान नहीं दिख रहा है। मैं की तरह बॉक्स :)
val myMap: Map[String,Any] = ... // extract metrics
val json = myMap.reduceLeft(_ ~ _) // create JSON of metrics
source code के माध्यम से नेविगेट मैं json4s
देखा है से बाहर काम करने के लिए निम्न क्रम JValue
के लिए आदिम प्रकार बदलने के लिए में निहित रूपांतरण प्रदान करता है कुछ उम्मीद होती है और यह भी JValue
को Traversable[A]/Map[String,A]/Option[A]
कन्वर्ट करने के लिए (A
से JValue
तक एक अंतर्निहित रूपांतरण उपलब्ध होने के प्रतिबंध के तहत, जिसे मैं समझता हूं वास्तव में इसका अर्थ है A
एक आदिम प्रकार है)। ~
ऑपरेटर JObject
JField
के बाहर बनाने का एक अच्छा तरीका प्रदान करता है, जो (String, JValue)
के लिए केवल एक प्रकार का उपनाम है।
इस मामले में, नक्शा मूल्यों प्रकार Any
है, इसलिए अंतर्निहित रूपांतरण जगह नहीं लेते हैं और इसलिए संकलक निम्न त्रुटि फेंकता है:
value ~ is not a member of (String, Any)
[error] val json = r.reduceLeft(_ ~ _)
वहाँ मैं क्या हासिल करना चाहते हैं के लिए एक समाधान है?
यदि मैं आपको सही ढंग से समझता हूं और आप केवल 'myMap' को क्रमबद्ध करना चाहते हैं, तो' Serialization.write (myMap) 'को सीधे क्यों नहीं कॉल करें? – edi
@ user3567830 मैं 'myMap' का JSON स्ट्रिंग प्रस्तुति चाहता हूं, जो कि JSON स्कैला लाइब्रेरी जैसे' json4s' – jarandaf
हां, 'org.json4s.jackson.Serialization.write (myMap) 'का उपयोग करने का उद्देश्य है। (मैंने json4s के जैक्सन संस्करण का उपयोग किया, लेकिन यह देशी संस्करण के लिए भी काम करना चाहिए)। – edi