将JDouble转换为Double(JSON库)

时间:2013-06-05 13:41:03

标签: scala

我正在使用https://github.com/json4s/json4s。如何将JDoubleJBool等值转换为相应的Scala数据类型 - DoubleBoolean

更新

scala> (json \ "status")
res8: org.json4s.JValue = JBool(false)

scala> (json \ "status").extract[Boolean]
<console>:16: error: No org.json4s.Formats found. Try to bring an instance of org.json4s.Formats in scope or use the org.json4s.DefaultFormats.
              (json \ "status").extract[Boolean]

2 个答案:

答案 0 :(得分:5)

正如Read Me中提到的那样,你是怎么做的......:)

  import org.json4s._
  import org.json4s.native.JsonMethods._

  implicit val formats = DefaultFormats 

  val json = parse("""
            {
                "mydouble" : 3.14,
                "isPie" : true
             }
    """) 

  val dbl = (json \ "mydouble").extractOpt[Double]
  //> dbl  : Option[Double] = Some(3.14)
  val bool = (json \ "isPie").extractOpt[Boolean] 
  //> bool  : Option[Boolean] = Some(true)  

答案 1 :(得分:2)

查看代码(https://github.com/json4s/json4s/blob/7c70e9664232ffee4acf24c8969424cd37957736/ast/src/main/scala/org/json4s/JsonAST.scala)表明您只需要调用JValue.values方法。

更新:从您的评论中看来,您的JDouble似乎并非如此,并希望提取其Double值(同样提取{{1}来自Boolean。相反,你有一个JDouble 并希望将其值提取为JValueDouble(事先知道预期的类型)。 这可以使用Boolean完成,如您链接到的 README 中所述:

extract

或:

(json \ "status").extract[Double]

有关更多示例,另请参阅此测试文件: https://github.com/json4s/json4s/blob/master/tests/src/test/scala/org/json4s/ExtractionExamplesSpec.scala