使用JSONPath从Web服务JSON响应中提取值

问题描述

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

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

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

如何获得这些结果:

  1. 第一项的主题-SomeSubjectOne
  2. 从所有实体中筛选特定主题值(例如,SomeSubjectTwo)
  3. 获取所有实体的主题

解决方法

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

  1. 第一项内容

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

    $.[0].subject
    

    返回:

SomeSubjectOne

  1. 特定主题值

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

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

返回

[{ “ id”:12 “ sourceID”:null, “ subject”:“ SomeSubjectTwo”, “ category”:“ SomeCategoryTwo”, “ impact”:null, “ status”:“ assigned”}] *

  1. 获取所有主题

    $.[*].subject
    

    或者简单地

    $..subject
    

返回

[“ SomeSubjectOne”,“ SomeSubjectTwo”]