使用 Scala Play 框架构建 jsonpath

Building jsonpath with Scala Play framework

我有一个简单的 json 结构,如下所示:

{
  "type": "type",
  "id": "id",
  "identifier": [
    {
      "system": "system1",
      "value": "value1"
    },
    {
      "system": "system2",
      "value": "value2
    }
  ]
}

我需要找到系统所在的标识符值 system1。我不能依赖标识符数组的顺序,所以我实际上需要检查 system 的值。

我构建了这个 json 查找路径:$.identifier[?(@.system == 'system1')].value,它有效。

现在我的问题是,如何将这个 jsonpath 与 Scala Play 框架一起使用?我知道其中有一个 JsPath class,但我只看到了带有直线路径的示例,none 具有像我需要的那样的 sybling 节点条件。而且我似乎无法从字符串构造 JsPath 实例。给我希望的是 documentationJsPath 类似于 XML 中的 XPath,它确实具有 condition-on-sybling-node 功能。

感谢任何帮助。谢谢。

类似并不意味着相同,JsPath不提供条件路径。

import play.api.libs.json._

val js = Json.parse("""{
  "type": "type",
  "id": "id",
  "identifier": [
    {
      "system": "system1",
      "value": "value1"
    },
    {
      "system": "system2",
      "value": "value2"
    }
  ]
}""")

(js \ "identifier").validate[Seq[JsObject]].flatMap[String] { jsonIdentifiers =>
  jsonIdentifiers.filter { idObj =>
    (idObj \ "system").toOption.contains(JsString("system1"))
  }.headOption.flatMap(obj => (obj \ "value").toOption) match {
    case Some(JsString(id)) =>
      JsSuccess(id)

    case _ =>
      JsError("Missing id")
  }
}

// => JsSuccess(value1,)