【问题标题】:get Json Values in Scala scala.util.parsing.json.JSON [duplicate]在 Scala scala.util.parsing.json.JSON 中获取 Json 值 [重复]
【发布时间】:2015-12-19 09:58:34
【问题描述】:

我是 Scala 的新手,我想从 json

中提取一些值

我有一个大的 json 数据作为字符串,我只想提取 review_score 值,我正在使用 import scala.util.parsing.json.JSON 图书馆。

var values = JSON.parseFull(bigJson)

我的问题是,解析为 json 后,我如何获得 reviewDetails 地图?

【问题讨论】:

  • 就我个人而言,我只使用了 jackson 库,从案例类中提取将使您能够通过 => values.reviewDetails 访问 reviewDetails - 我假设这里不是这种情况?

标签: java json scala loops dictionary


【解决方案1】:

parseFull 将返回一个 Option[Any],如果 JSON 字符串指定一个数组,则它包含一个 List[Any],或者如果 JSON 字符串指定一个对象,则返回一个 Map[String,Any],如文档所述。

在您的情况下,您要检索的值是映射中的键值对,映射本身就是全局映射的键值对。

这有点难看,但是由于您知道 JSON 的结构,getasInstanceOf 的组合将允许您获得所需的类型值。

val jsonObject = JSON.parseFull("...")
val globalMap = x.get.asInstanceOf[Map[String, Any]]
val reviewMap = globalMap.get("reviewDetails").get.asInstanceOf[Map[String, Any]]
val reviewScore = reviewMap.get("review_score").get.asInstanceOf[Double]

请注意,这里我使用get“安全地”,因为已知该值存在于您的上下文中,但您也可以使用isEmptygetOrElse

如果你想要一个可扩展的代码,你可以有效地查看How to parse JSON in Scala using standard Scala classes?

【讨论】:

  • 谢谢,但我在第 3 行收到 java.util.NoSuchElementException: None.get 错误,其中 reviewMap
  • @Alaeddine 抱歉,应该是 globalMap.get("reviewDetails") 而不是“review_details”。
  • 什么是xget 的调用对象)?应该是jsonObject
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 2013-11-27
  • 1970-01-01
  • 2021-04-25
  • 1970-01-01
  • 2018-07-27
相关资源
最近更新 更多