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

时间:2017-11-16 12:24:49

标签: json jsonpath 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。

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

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

[

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

以下查询已经显示了我想要的内容,但它没有显示键(在这种情况下为“firstkey”和“thirdkey”)。

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

请帮我解决这个问题。

感谢。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用此脚本。

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

结果:

[
    0,
    0
]

答案 1 :(得分:0)

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

将输出

[
  "firstkey",
  "thirdkey"
]

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