2016-03-20 100 views
0

我有一个像下面这样的json字符串,请建议对我的代码做些什么更改才能将此json解析为Scala中的一个case类?Scala - 解析嵌套的json数组

{ 
     "boundaries": [ 
      [ 
      [ 
       -11110372.022426892, 
       4676428.402837045 
      ], 
      [ 
       -11124418.538414171, 
       4740594.245854561 
      ], 
      [ 
       -11101812.444140816, 
       4744556.315065523 
      ], 
      [ 
       -11087326.99540134, 
       4684866.726958438 
      ], 
      [ 
       -11108506.41908069, 
       4677271.949698344 
      ], 
      [ 
       -11110152.500391051, 
       4676569.01290604 
      ], 
      [ 
       -11110372.022426892, 
       4676428.402837045 
      ] 
      ] 
     ] 
     } 

我曾尝试下面的代码,但它不工作


import org.json4s._ 
import org.json4s.JsonDSL._ 
import org.json4s.JsonAST._ 
import org.json4s.jackson.JsonMethods._ 

val jsonString = """<the string given above>""" 
val jsonAst: JValue = parse(jsonString) 

case class Boundaries(r : Array[Array[Array[Array[Double]]]]) 

如何这种情况下类关联的JSON字符串,并得到本课程的所有的数值?

回答

1

这为我工作:

import org.json4s.jackson.JsonMethods._ 
import org.json4s._ 
import org.json4s.JsonDSL._ 
import org.json4s.JsonAST._ 
import org.json4s.jackson.JsonMethods._ 

implicit val formats = DefaultFormats 

case class Boundaries (boundaries: List[List[List[Double]]]) 

val jsonString = """ 
<your json> 
""" 

scala> val jsonAst: JValue = parse(jsonString) 
jsonAst: org.json4s.JsonAST.JValue = <parsed JValue> 

scala> jsonAst.extract[Boundaries] 
res0: Boundaries = Boundaries(List(List(List(-1.1110372022426892E7, 4676428.402837045), List(-1.1124418538414171E7, 4740594.245854561), List(-1.1101812444140816E7, 4744556.315065523), List(-1.108732699540134E7, 4684866.726958438), List(-1.110850641908069E7, 4677271.949698344), List(-1.1110152500391051E7, 4676569.01290604), List(-1.1110372022426892E7, 4676428.402837045)))) 
+0

请您指教如何在最后一步之后提取所有的数值?举例来说,我做val b =(jsonAst).extract [Boundaries],然后如何使用b提取数值? – Phani

+0

就像你用任何元素列表做的那样?这也取决于你最终打算如何处理这个对象。 – Ashalynd