如何通过使用 json 查询匹配值来查找所有 json 键值对

How to find all the json key-value pair by matching the value using json query

我有以下 JSON 结构:

{
    "key" : "value",
    "array" : [
        { "key" : 1 },
        { "key" : 2, "misc": {
                "a": "Apple",
                "b": "Butterfly",
                "c": "Cat",
                "d": "Dog"
            } },
        { "key" : 3 }
    ],
    "tokenize" : {
         "firstkey" : {
                      "token" : 0
                    },
         "secondkey" : {
                      "token" : 1
                    },
         "thirdkey" : {
                      "token" : 0
                    }
      }

}

我可以通过以下语法遍历上述结构直到 array->dictionary->b :

$.array[?(@.key=2)].misc.b

现在我需要打印所有值为 0 的标记。与上面所示相同的方法我可以遍历直到 $.array[?(@.key=2)].tokenize.

我如何查询它以打印具有 token:0 的所有值。

准确地说,我希望输出显示为:

[

      "tokenize" : {
         "firstkey" : {
                      "token" : 0
                    },
         "thirdkey" : {
                          "token" : 0
                        }
          }
]

下面的查询已经显示了接近我想要的内容,但它没有显示键(在本例中为 "firstkey" 和 "thirdkey")。

 $.tokenize[?(@.token == 0)]

请帮我也搞定这个。

谢谢。

你可以试试这个脚本。

$.tokenize[?(@.token == 0)].token

结果:

[
    0,
    0
]
$.tokenize[?(@.token == 0)]~

会输出

[
  "firstkey",
  "thirdkey"
]

对于 OP 的示例 json,使用 https://jsonpath-plus.github.io/JSONPath/demo/ 验证您的数据。