scala迭代JSON数组

时间:2016-08-17 10:41:22

标签: json scala collections

我有一个非常简单的JSON,如下所示,我想获得sJson[0], sJson[1]个对象,我该如何实现?

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

2 个答案:

答案 0 :(得分:2)

虽然scala.util.parsing.json.JSON运行良好,但最好使用像json4s这样具有流畅scala api的外部库。

您可以像查询xml一样查询json(如JsonPath)。

以下是在项目中使用json4s后如何使用json4s的步骤。

首先添加以下导入

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

现在通过

创建一个Jvalue
val jsonA = """[{"foo": 4, "bar": "baz"},{"bla": 4, "bar": "bla"}]"""
val json = parse(jsonA)

你的json对象是

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"}

有关详情,请参阅json4s主页中的查询JSON 部分。

注意:要导入jars,您可以使用maven / gradle或使用:require 命令将它们导入scala repl。

答案 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))