如何在 Scala 中遍历 json 数组

How to iterate through json array in scala

我有一个如下所示的 json 数组,它是从数据库列中提取到 Scala 中的

jsonArrayString = "[{"firstName": "Harry", "lastName": "Smith"}, {"firstName": "John", "lastName": "Ken"}]"

我想遍历这个数组并在 for 循环中获取字典键的值。

非常感谢您的帮助!

Scala 没有任何 built-in JSON 处理,因此您需要使用 third-party 库。 This answer 列出 Scala-specific 个库,任何 Java 个库也可以。

即使它不是 Scala-specific 我通常使用 Jackson, when I'm working with JSON in Scala because it's usually already on the classpath in the apps I work in and it's a safe bet it will be supported well into the future because it's so widely used. It has an optional Scala module 来调整它以与 Scala 的内置类型一起使用。

如果 Jackson 及其 Scala 模块在您的类路径中,这是一种解析 jsonArrayString 的方法:

import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.scala._

case class Person(firstName : String, lastName : String)

val jackson = new ObjectMapper with ScalaObjectMapper
jackson.registerModule(DefaultScalaModule)

val jsonArrayString =
  """[{"firstName": "Harry", "lastName": "Smith"},
     |{"firstName": "John",  "lastName": "Ken"}]""".stripMargin

jackson.readValue[List[Person]](jsonArrayString).foreach { person =>
  println(s"First Name: ${person.firstName}; Last Name: ${person.lastName}")
}

如果 firstNamelastName 可以为空或不存在,您可以使用 Option[String] 类型声明它们,Scala 模块会将 null 映射到 None.

这个问题很宽泛。 Scala 中有许多 JSON 解析库,这使这项任务变得微不足道。 他们都会将一个 JSON 数组反序列化为一个 scala 列表,无论你将它解码成什么类型​​。 由于您正在处理产品,因此您可以选择使用任何产品类型,例如内置元组或自定义 class。 我个人偏爱 Circe https://github.com/circe/circe

libraryDependencies += "org.json" % "json" % "20200518"

这对 Json 迭代很有帮助。