2013-06-05 32 views
2

我正在使用https://github.com/json4s/json4s。如何将其值如JDouble,JBool转换为相应的Scala数据类型 - DoubleBoolean将JDouble转换为Double(JSON库)

UPDATE

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] 
+0

不知道,但尝试像这样'(jv \“items”\“type”)。extractOpt [String]'如果它工作! – Shrey

+0

@Shrey,jv,“物品”和“类型”是什么?我必须纠正它为我的JSON结构才能够尝试它。 –

回答

1

看代码(https://github.com/json4s/json4s/blob/7c70e9664232ffee4acf24c8969424cd37957736/ast/src/main/scala/org/json4s/JsonAST.scala)显示,你只需要调用JValue.values方法。

UPDATE:从您的评论看来,这是没有这么多,你有一个JDouble并要提取其Double值(和同样从JDouble提取Boolean取而代之的是,你有一个JValue 和希望提取其值作为DoubleBoolean(预先知道预期的类型) 这可以用extract来完成,如README你链接到解释:

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

或:

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

又见这个测试文件的例子: https://github.com/json4s/json4s/blob/master/tests/src/test/scala/org/json4s/ExtractionExamplesSpec.scala

+0

values方法不够,它不会返回Scala的类型。 –

+0

你能详细说一下吗? 'JDouble.values'返回一个'scala.Double'和'JBoolean.values'返回一个'scala.Boolean'。这不是你以后的事吗? –

+0

'values' returns'Values'(大写) - '(json \“status”)。values --- status:org.json4s.JsonAST.JValue#Values = false',意思是''status' org.json4s.JsonAST.JValue#值为'false'。 –

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)