如何解决如何在Scala中遍历json数组
我有一个如下所示的json数组,它是从数据库列中提取到scala的
jsonArrayString = "[{"firstName": "Harry","lastName": "Smith"},{"firstName": "John","lastName": "Ken"}]"
我想遍历此数组并在for循环中获取字典键的值。
非常感谢您的帮助!
解决方法
Scala没有任何内置的JSON处理,因此您需要使用第三方库。 This answer列出了Scala特定的库,任何Java库也可以使用。
即使它不是特定于Scala的,我通常也使用Jackson,当我在Scala中使用JSON时,因为它通常已经在我使用的应用程序的类路径中,并且可以肯定会支持因为它已经被广泛使用,所以在未来很长一段时间。它具有optional Scala module,可以使其适应Scala的内置类型。
如果杰克逊及其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}")
}
如果firstName
或lastName
可以为null或不存在,则可以使用类型Option[String]
声明它们,Scala模块会将null
映射到None
这个问题非常广泛。 Scala中有许多JSON解析库,这使这项工作变得微不足道。 它们都会将JSON数组反序列化为要解码的任何类型的scala列表。 由于您要处理产品,因此可以选择使用任何产品类型,例如内置元组或自定义类。 我个人比较喜欢Circe https://github.com/circe/circe
,libraryDependencies += "org.json" % "json" % "20200518"
这对Json迭代很有帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。