【问题标题】:extracting keys from json string using json4s使用 json4s 从 json 字符串中提取键
【发布时间】:2015-12-15 12:01:53
【问题描述】:

谁能告诉我如何使用 json4s 从 json 中提取密钥。 我的用例: json 作为字符串存储在 scala 变量中:

 {
 "key1" : "val1",
 "key2" : ["12", "32"],
 "key3" : {"keyN" : "valN"}
 }

我想把它转换成下面的 Map[String, String]:

 (key1 -> "val1", key2 -> "[\"12\",\"32\"]", key3 -> "{\"keyN\":\"valN\"}"

有没有一种简单的方法可以用 json4s 实现这一点? 提前致谢

【问题讨论】:

    标签: json scala json4s


    【解决方案1】:
    val result: Map[String, String] = parse( """ {
                                               | "key1" : "val1",
                                               | "key2" : ["12", "32"],
                                               | "key3" : {"keyN" : "valN"}
                                               | }""".stripMargin).mapField(k => {
      val v: String = k._2 match {
        case s: JString => k._2.extract[String]
        case _ => write(k._2)
      }
      (k._1, JString(v))
    }).extract[Map[String, String]]
    println(result)
    

    您可以使用mapFieldJValue 映射到字符串

    • 如果值的类型是String,只需提取为字符串
    • 如果值的类型是其他类型,则使用json4s将其解析为JSON字符串
    • 最后将JValue解压为Map[String, String]

    【讨论】:

    • 谢谢,工作正常。我没有看到这里的关键 mapField 方法:(
    【解决方案2】:
    implicit val formats = DefaultFormats
    
    val a = parse(""" { "numbers" : [1, 2, 3, 4] } """)
    println(a.extract[Map[String, Any]].keySet)
    

    【讨论】:

      猜你喜欢
      • 2020-08-20
      • 2015-11-29
      • 1970-01-01
      • 2017-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 2016-05-27
      相关资源
      最近更新 更多