【问题标题】:get Json head node value in Scala在Scala中获取Json头节点值
【发布时间】:2015-07-05 22:30:49
【问题描述】:

我是 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”获取地图。但我无法从此地图中获取第一个键“index_key”。谁能告诉我如何获取地图键值“index_key”? “res40:json.Values”与地图类型有什么关系?非常感谢。

【问题讨论】:

    标签: java json scala tree json4s


    【解决方案1】:

    我不熟悉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" 将在该节点返回 JSON。

    【讨论】:

    • 嗨@michael-kendra,非常感谢您的详细回答。如果,使用您的 json 示例,我想获取第一个节点键值,而不是第一个节点的 json 内容怎么办?类似“val firstNode = 'person'”。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-03
      • 1970-01-01
      • 2023-01-24
      • 2015-12-19
      • 2016-03-20
      • 2018-05-21
      • 2021-09-14
      • 1970-01-01
      相关资源
      最近更新 更多