在 Scala 中获取 Json 头节点值

get Json head node value in Scala

我是 Scala 的初学者,使用库“json4s”进行 JSON 解析,我的 JSON 数据格式如下:

scala> val str = """
 | {
 |     "index_key": {
 |         "time":"12938473",
 |         "event_detail": {
 |             "event_name":"click",
 |             "location":"US"
 |         }
 |     }
 | }
 | """

我正在尝试获取 "index_key" 并将其签名到一个变量。我在下面试过:

scala> val json = parse(str)
json: org.json4s.JValue = JObject(List((index_key,JObject(List((time,JString(12938473)), (event_detail,JObject(List((event_name,JString(click)), (location,JString(US))))))))))

scala> json.values
res40: json.Values = Map(index_key -> Map(time -> 12938473, event_detail -> Map(event_name -> click, location -> US)))

我可以通过 "json.values.head" 或 "json.values.keys" 从 "json.values" 获取地图。但是我无法从这张地图上得到第一个键"index_key"。谁能告诉我如何获取地图键值"index_key"? "res40: json.Values" 与地图类型有什么关系?非常感谢。

我不熟悉 json4s 具体但我很确定它的行为与大多数其他 json 库一样,因为它为您提供了一个很好的 DSL,用于从解析的 json.

我查看了 docs 并发现了这个:

scala> val json =
  ("person" ->
    ("name" -> "Joe") ~
    ("age" -> 35) ~
    ("spouse" ->
      ("person" ->
        ("name" -> "Marilyn") ~
        ("age" -> 33)
      )
    )
  )

scala> json \ "spouse"
res0: org.json4s.JsonAST.JValue = JObject(List(
      (person,JObject(List((name,JString(Marilyn)), (age,JInt(33)))))))

\运算符遍历JSON结构并提取该节点的数据。请注意,在这种情况下,双斜杠运算符递归地工作,要到达根节点,您将使用单斜杠,即 '\'.

对于您的示例,它将是 json \ "index_key",这将 return 该节点的 JSON。

头节点值可以像下面这样检索,感谢@bjfletcher

的回答
parse(str).asInstanceOf[JObject].values.head._1