使用 Play JSON 从给定路径的 JSON 中提取数据

extracting data from JSON for a given path using Play JSON

我正在尝试创建一个函数,它将 Json 字符串和路径作为输入,returns 该路径中的数据,例如使用 Scala 从下面的 JSON 中提取 id 字段,使用路径 "employee/id"

val json = {
  "employee" : {
    "id" : "12345",
    "department" : "Finance"
    }
}


def extractData(json: String, path: String) // returns data for the given path
extractData(json, "employee/id") // returns "12345"

我可以直接使用代码提取,

val data = Json.parse(jsonData) / "employee" / "id"

我想提取数据,不对路径进行硬编码,我尝试使用下面的代码

val path = "employee/id"
val levels = path.split('/')
val data = levels.foldLeft(parsedJson)((acc, level) => (acc \ level))

我收到 Type mismatch 错误。我也尝试过,使用其他具有可变状态的方法。
在 Scala 中有什么实用的方法可以做到这一点吗?

Scala version = 2.12.10
Play json version = 2.9.0

您需要将类型 JsValue 转换为 JsLookupResult。你可以这样做:

  val jsonTest = """{
                   |  "employee" : {
                   |    "id" : "12345",
                   |    "department" : "Finance"
                   |    }
                   |}""".stripMargin

  def main(args: Array[String]): Unit = {
      val x = extractData(jsonTest, "employee/id").as[String]
    println(x)
  }

  def extractData(json: String, path: String): JsLookupResult = {
    val jsValue: JsValue = Json.parse(json)
    path.split("/").foldLeft(jsValue.result) { (acc, el) =>
      acc \ el
    }
  }