使用json4s从json字符串中提取键

时间:2015-12-15 12:01:54

标签: json scala json4s

有人可以告诉我如何使用json4s从json中提取密钥。 我的用例: json在scala变量中以字符串形式存储:

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

我希望将其转换为以下Map [String,String]:

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

有一个简单的方法来实现这个json4s? 提前致谢

2 个答案:

答案 0 :(得分:4)

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)

您可以使用mapField映射JValue toString

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

答案 1 :(得分:0)

implicit val formats = DefaultFormats

val a = parse(""" { "numbers" : [1, 2, 3, 4] } """)
println(a.extract[Map[String, Any]].keySet)