【问题标题】:Extract values from web service JSON response with JSONPath使用 JSONPath 从 Web 服务 JSON 响应中提取值
【发布时间】:2020-10-07 10:02:59
【问题描述】:

我有一个来自 Web 服务的 JSON 响应,看起来像这样:

[
   {
      "id":4,
      "sourceID":null,
      "subject":"SomeSubjectOne",
      "category":"SomeCategoryTwo",
      "impact":null,
      "status":"completed"  
   },
   {
      "id":12,
      "sourceID":null,
      "subject":"SomeSubjectTwo",
      "category":"SomeCategoryTwo",
      "impact":null,
      "status":"assigned"
   }
]

我需要做的是使用 JSONPATH 查询从所有实体中提取主题。

我怎样才能得到这些结果:

  1. 第一项的主题 - SomeSubjectOne
  2. 过滤来自所有实体的特定主题值(例如 SomeSubjectTwo)
  3. 从所有实体获取主题

【问题讨论】:

标签: jsonpath json-path-expression


【解决方案1】:

Goessner 的原始 JSONPath 文章是一个很好的参考点,所有实现或多或少都遵循建议的查询语法。但是,Jayway JsonPath/Java、JSONPath-Plus/JavaScript、flow-jsonpath/PHP 等实现在某些领域可能会有所不同。这就是为什么了解您实际使用的实现非常重要的原因。

  1. 主题来自第一项

    只需使用索引来选择所需的数组元素。

    $.[0].subject
    

    返回:

某个主题

  1. 具体主题价值

    首先,选择任何元素..,检查主题为[?(@.subject] 的元素并使用== '..' 进行比较。

    $..[?(@.subject == 'SomeSubjectTwo')]
    

返回

[{ “身份证”:12, “sourceID”:空, “主题”:“SomeSubjectTwo”, "category" : "SomeCategoryTwo", “影响”:空, “状态”:“分配”}]*

  1. 获取所有科目

    $.[*].subject
    

    或者干脆

    $..subject
    

返回

[ "SomeSubjectOne", "SomeSubjectTwo" ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 2014-09-24
    相关资源
    最近更新 更多