在Scala中获取Json头节点值

时间:2015-07-05 22:30:50

标签: java json scala tree json4s

我是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类型有什么关系?非常感谢。

2 个答案:

答案 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)

由于@bjfletcher的答案

头节点值可以像下面一样检索

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