使用 Scala Play 框架构建 jsonpath



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

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

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

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

现在我的问题是,如何将这个jsonpath与Scala Play框架一起使用?我知道里面有一个JsPath类,但我只见过直线路径的例子,没有像我需要的那种有sibling节点的条件。而且我似乎无法从字符串中构造一个JsPath实例。给我希望的是,文档说JsPath类似于XML中的XPath,它确实具有Sybling节点上的条件功能。

任何帮助,不胜感激。谢谢。

类似并不意味着相同,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,)

最新更新