2015-09-03 9 views
22

का उपयोग कर रहा json4s, जहां मैं एक पार्स json से स्ट्रिंग मान निकालने के लिए कोशिश कर रहा हूँ के लिए स्काला कंसोल सत्र के बाद किया है मूल्य:निकालें स्ट्रिंग json4s

scala> import org.json4s._ 
import org.json4s._ 

scala> import org.json4s.native.JsonMethods._ 
import org.json4s.native.JsonMethods._ 

scala> val s = """ {"a": "hello"} """ 
s: String = " {"a": "hello"} " 

scala> val json = parse(s) 
json: org.json4s.JValue = JObject(List((a,JString(hello)))) 

scala> json \ "a" 
res0: org.json4s.JValue = JString(hello) 

scala> res0.extract[String] 
<console>:17: error: No org.json4s.Formats found. Try to bring an instance of org.json4s.Formats in scope or use the org.json4s.DefaultFormats. 
       res0.extract[String] 
         ^

scala> import org.json4s.Formats._ 
import org.json4s.Formats._ 

scala> res0.extract[String] 
<console>:20: error: No org.json4s.Formats found. Try to bring an instance of org.json4s.Formats in scope or use the org.json4s.DefaultFormats. 
       res0.extract[String] 
         ^

scala> import org.json4s.DefaultFormats._ 
import org.json4s.DefaultFormats._ 

scala> res0.extract[String] 
<console>:23: error: No org.json4s.Formats found. Try to bring an instance of org.json4s.Formats in scope or use the org.json4s.DefaultFormats. 
       res0.extract[String] 
         ^

org.json4s.DefaultFormats, org.json4s.Formats और वहाँ सदस्य पहले ही दायरे में हैं। मैं इसे कैसे ठीक करूं?

EDIT1

@mfirry के जवाब से, इस काम करता है:

scala> implicit val formats = DefaultFormats 
formats: org.json4s.DefaultFormats.type = [email protected] 

scala> val json = parse(""" {"a": "hello", "b": 1.2} """) 
json: org.json4s.JValue = JObject(List((a,JString(hello)), (b,JDouble(1.2)))) 

scala> (json \ "b").extract[String] 
res6: String = 1.2 

scala> (json \ "b").extract[Double] 
res7: Double = 1.2 
+0

'extractOpt' रिटर्न निर्दिष्ट प्रकार का विकल्प, यदि फ़ील्ड एक वैकल्पिक है। – ruhong

उत्तर

46

तुम बस

implicit val formats = DefaultFormats 

जोड़ने की जरूरत है और यह सिर्फ ठीक काम करेंगे।

+10

यह क्यों जरूरी है ?? – Nilesh

+0

और यदि आपको कक्षा में इसकी आवश्यकता है, तो आप इसे कक्षा – cph2117

+0

के शीर्ष पर घोषित कर सकते हैं भले ही आपको इसे किसी फ़ंक्शन में चाहिए, इसे उपरोक्त से ऊपर शीर्ष पर घोषित करें। यह आगे java.io.NotSerializableException – ivankeller

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