java - JSONPath和Traverson过滤: single element array

标签 java json jsonpath

这是我尝试使用 Traverson 处理的 Json,以从此 HAL 中提取单个链接:

{
  "_links": {
    "curies": [
      {
        "href": "https://localhost/auth/def/rels/{rel}",
        "name": "auth",
        "templated": true
      }
    ],
    "self": {
      "href": "https://localhost/auth/identity"
    }
  },
  "_embedded": {
    "auth": [
      {
        "_links": {
          "auth:ad": [
            {
              "href": "https://localhost/auth/ad"
            }
          ]
        },
        "kind": "oauth2"
      },
      {
        "_links": {
          "auth:default": [
            {
              "href": "https://localhost/auth/default" // **Link that I need**
            }
          ]
        },
        "kind": "oauth2"
      }
    ]
  }
}

负责理想处理的 Java 代码应该如下所示:

Link test = traverson
        .follow("auth")
        .follow("$.['_embedded']['auth']..['_links']['auth:default']..['href'][0]")
        .asLink();

但由于某种原因,尽管在 JSONPath 表达式中添加最后一个 [0] 之前我得到了一个元素的数组,但我没有得到任何命中。有没有办法提取这个单个链接,这样我就不会返回数组?我用过这个tool用于测试。

最佳答案

实现我的目标所需的代码应该如下所示:

JsonPathLinkDiscoverer disc = new JsonPathLinkDiscoverer("$._embedded..auth.._links..['%s']..href", MediaTypes.HAL_JSON);
Link authLink = disc.findLinksWithRel("auth:default", <json>).get(0);

哪里<json>应该是原始问题中示例的 json 表示形式(可能类似于其他调用的响应)。

关于java - JSONPath和Traverson过滤: single element array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57326035/

相关文章:

java - 将 int 数组转换为 char 数组

javascript - 基于一个数组对象键和其他数组对象值创建另一个新数组?

Javascript——如果 h2_JSON 是一个对象 {}(如我的 console.log 所示——为什么它会落入 else 循环?

java - 查询后从 jsonpath 数组中提取单个元素

java - 为 json 字符串创建 java 解析器

java - 在 NetBeans 中检测设计时间

java - JFrame 不绘制内容,仅在 ActionListener 内可见时显示白色矩形

java - 需要安装Liberty 17和JRE 7

c# - 从 ASP.NET Web Api 中的中间件访问 JsonOptions

java - 使用java提取引号括起来的特定值