在 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
我是 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