如何通过 JSONPath 按其中的特定值过滤整个字典?

How to filter for a whole dictionary by a specific value inside it via JSONPath?

我(刚刚)了解到 JSONPath 是我可以通过给定键名或数组索引等来 filter/select 部分 JSON 字符串。 结果是 that key/value 我在 JSONPath 表达式中给出的。 但是,结果,我想得到整个字典,其中包含我要过滤的 key/value 对——不仅是 key/value 对。

例如,想象以下 JSON 字符串:

[
 {
  „date“: „2021-06-18T10:23:45.000+0000“,
  „material“: {
    „key1“: „value1“,
    „key2“: „value2“
  },
  „preset“: {
    „duration“: [ 120, 180 ],
    „increments“: 3,
    „id“: „16“,
    „uniqueId“: „1357924680“
  },
  „userId“: 23456
 },
 {
  „date“: „2021-06-18T08:15:45.000+0000“,
  „material“: {
    „key1“: „value1“,
    „key2“: „value2“
  },
  „preset“: {
    „duration“: [ 180 ],
    „increments“: 1,
    „id“: „10“,
    „uniqueId“: „1797924680“
  },
  „userId“: 23456
 },
 {
  „date“: „2021-06-16T17:12:23.000+0000“,
  „material“: {
    „key1“: „value1“,
    „key2“: „value2“
  },
  „preset“: {
    „duration“: [ 240 ],
    „increments“: 1,
    „id“: „10“,
    „uniqueId“: „1357944680“
  },
  „userId“: 23456
 },
 {
  „date“: „2021-06-09T08:45:45.000+0000“,
  „material“: {
    „key1“: „value1“,
    „key2“: „value2“
  },
  „preset“: {
    „duration“: [ 120, 180 ],
    „increments“: 3,
    „id“: „16“,
    „uniqueId“: „2357924680“
  },
  „userId“: 23456
 }
]

现在假设我想要获取那些数组元素(完整的,以及它们的所有数据),其中“preset”命名字典中“id”的值等于“16”。 JSONPath 查询字符串是什么? 记住:我不想得到 just { „id“: „16“, „id“: „16“ } 作为结果,而是整个字典都包含这两个结果案例:

 {
  „date“: „2021-06-18T10:23:45.000+0000“,
  „material“: {
    „key1“: „value1“,
    „key2“: „value2“
  },
  „preset“: {
    „duration“: [ 120, 180 ],
    „increments“: 3,
    „id“: „16“,
    „uniqueId“: „1357924680“
  },
  „userId“: 23456
 },
 {
  „date“: „2021-06-09T08:45:45.000+0000“,
  „material“: {
    „key1“: „value1“,
    „key2“: „value2“
  },
  „preset“: {
    „duration“: [ 120, 180 ],
    „increments“: 3,
    „id“: „16“,
    „uniqueId“: „2357924680“
  },
  „userId“: 23456
 }

而且我不想在任何编程语言的一些编码 project/a program/source 代码中执行此操作。相反,我有一个 REST API 工具,我可以在其中使用 JSON 路径查询字符串过滤 JSON 响应(它是 i[Pad][=51 的应用程序“HTTPBot” =]).

这里有一些JSON我试过但没有给出我想要的结果的路径示例:

$..preset 将对任何 属性(在任何深度)调用 preset 和 return 这些属性中所有值的集合执行递归搜索.

要获取项目,您需要有一个作用于它们的选择器。由于您要过滤项目,因此您正在查看过滤器选择器 [?(<expr>)].

在 JSON 路径表达式中,您可以使用 @ 查看每个项目,因为选择器迭代数组,它支持从中构建路径。我们希望 @.preset.id16,因此我们可以使用

$[?(@.preset.id=='16')]