2016-08-17 112 views
0

我有一個非常簡單的JSON,如下所示,我想獲得sJson[0], sJson[1]對象,我該如何實現這一目標?scala迭代JSON數組

scala> val jsonA = "[{'foo': 4, 'bar': 'baz'},{'bla': 4, 'bar': 'bla'}]" 
jsonA: String = [{'foo': 4, 'bar': 'baz'},{'bla': 4, 'bar': 'bla'}] 

scala> val sJson = parseFull(jsonA) 
sJson: Option[Any] = None 

scala> println(sJson.toString()) 
None 

enter image description here

+0

您使用哪個庫進行json解析? –

+0

parseFull來自scala.util.parsing.json.JSON包 – Samar

+0

是,'scala.util.parsing.j son.JSON'包。我只是想'sJson' obj [0],obj [1] ..等 –

回答

1

JSON對象要你周圍的變量加上雙引號:

val jsonA = """[{"foo": 4, "bar": "baz"},{"bla": 4, "bar": "bla"}]""" 
val sJson = parseFull(jsonA).get.asInstanceOf[List[Map[String,String]]] // List(Map(foo -> 4.0, bar -> baz), Map(bla -> 4.0, bar -> bla)) 
+0

獲取一些例外'scala> val sJson = parseFull(jsonA).get java.util.NoSuchElementException:None.get at scala .None $ .get(Option.scala:347) at scala.None $ .get(Option.scala:345)' –

+0

嗯,你的jsonA是什麼?我在答案中發佈的那個解析正常。 – Samar

+0

我在您剛剛發佈的圖像中看到JSON中變量的單引號。 – Samar

1

雖然scala.util.parsing.json.JSON運作良好,最好使用外接像json4s這樣的庫,它有一個流暢的scala api。

您可以像查詢xml一樣查詢json(如JsonPath)。

下面是如何在您的項目中使用json4s以滿足您的需求的步驟。

首先做

val jsonA = """[{"foo": 4, "bar": "baz"},{"bla": 4, "bar": "bla"}]""" 
val json = parse(jsonA) 

您的JSON對象添加以下進口

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

現在創建一個Jvalue是

json: org.json4s.JValue = JArray(List(JObject(List((foo,JInt(4)), (bar,JString(baz)))), JObject(List((bla,JInt(4)), (bar,JString(bla)))))) 

爲了得到第一個(0)級子

val firstChild = (json)(0) 

firstChild: org.json4s.JsonAST.JValue = JObject(List((foo,JInt(4)), (bar,JString(baz)))) 

要獲得這個字符串表示則firstChild

val firstChildString = compact(render(firstChild)) 

firstChildString: String = {"foo":4,"bar":"baz"} 

請參閱部分查詢JSONjson4s主頁瞭解更多。

注:導入您可以使用Maven/gradle這個或使用它們導入到斯卡拉REPL罐子:需要命令。