繁体   English   中英

Scala遍历JSON数组

[英]scala iterate over JSON Array

我有一个非常简单的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

在此处输入图片说明

虽然scala.util.parsing.j‌son.JSON可以很好地工作,但是最好使用外部库(如json4s) ,该库具有流畅的scala API。

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

下面是将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查询部分。

注意:要导入jar,您可以使用maven / gradle或通过:require命令将其导入scala repl。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM