我是Scala的初学者,使用lib“ 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”获取Map。但是我无法从这张地图中获得第一个键“index_key”。任何人都可以告诉我如何获取地图键值“index_key”?什么“res40:json.Values”与Map类型有什么关系?非常感谢。
答案 0 :(得分:1)
我并不熟悉json4s
,但我非常确定它与大多数其他json库一样,因为它为您提供了一个很好的DSL,用于从解析的json中提取数据。 / p>
我查看了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"
,它将在该节点返回JSON。
答案 1 :(得分:0)
头节点值可以像下面一样检索
parse(str).asInstanceOf[JObject].values.head._1