2013-06-05 71 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)