Extraire la valeur de chaîne en utilisant json4s

J'ai la session de console Scala suivante pour json4s, où j'essaie d'extraire la valeur de chaîne d'un JSON analysé:

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 et il membres sont déjà dans la portée. Comment puis-je résoudre ce problème?

EDIT1

De la réponse de @mfirry, cela fonctionne:

scala> implicit val formats = DefaultFormats
formats: org.json4s.DefaultFormats.type = org.json4s.DefaultFormats$@12b195f5

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
25
demandé sur tuxdna 2015-09-03 17:28:27

1 réponses

, Vous avez juste besoin d'ajouter

implicit val formats = DefaultFormats

Et ça va marcher juste ok.

53
répondu mfirry 2015-09-03 14:46:55