【问题标题】:How to find all the json key-value pair by matching the value using json query如何通过使用json查询匹配值来查找所有json键值对
【发布时间】:2017-11-16 12:24:49
【问题描述】:

我有以下 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
                    }
      }

}

我可以通过以下语法遍历上述结构直到数组->字典->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)]

请帮我把这个也搞定。

谢谢。

【问题讨论】:

  • 有人对这篇文章有任何答案吗?请帮忙。提前致谢。
  • 你用的是什么工具?
  • @sarslan 我正在使用jsonquerytool.com,查询应该在这里运行良好。谢谢

标签: json jsonpath json-query


【解决方案1】:

你可以试试这个脚本。

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

结果:

[
    0,
    0
]

【讨论】:

  • @sarsalan 我已经编辑了我的问题以显示我希望如何显示输出。您的答案只是打印 0,我希望打印具有 token == 0 的整个结构。希望我能解释你的要求。谢谢
  • 基本上我希望在 token == 0 的地方打印“tokenize”的所有键(连同它们对应的值)。
  • 我知道JSonPath只关注节点的值。它似乎是一种非常原始的语言,没有任何扩展的键参数。
【解决方案2】:
$.tokenize[?(@.token == 0)]~

会输出

[
  "firstkey",
  "thirdkey"
]

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 2023-03-17
    • 2019-01-07
    相关资源
    最近更新 更多