获取 JSON 格式的密钥

问题描述 投票:0回答:3

我从外部系统获得以下 JSON 结果:

{
  "key1": "val1",
  "key2": "val2",
  "key3": "val3"
}

现在我想使用 JSONPath 显示所有键和所有值。所以我正在寻找一些东西来获得 key1、key2 和 key3 作为结果。另外我想使用属性的索引,例如。 g。

$....[2].key
获取“key3”等。 有没有办法做这样的事情?

json jsonpath
3个回答
49
投票

我发现 tilda

~
符号能够检索它所调用的值的键。因此,对于您的示例,查询如下:

$.*~

返回此:

[
  "key1",
  "key2",
  "key3"
]

另一个例子,如果我们有一个像这样的 JSON 文档:

  {
  "key1": "val1",
  "key2": "val2",
  "key3": {
      "key31":"val31",
      "key32":"val32"
  }
}

这样的查询:

$.key3.*~

会返回这个:

[
  "key31",
  "key32"
]

需要注意的是,这些示例适用于 JSONPath.com 和其他一些模拟器/在线工具,但在某些模拟器/在线工具上则不然。这可能是因为我在 JSONPath plus 文档中发现了 tilda(~) 运算符,而不是官方文档。


0
投票

对于 java json 路径,请使用以下表达式:

 private static Configuration getConfiguration() {
        return Configuration.builder().options(Option.AS_PATH_LIST).build();
    }
    DocumentContext parsedBodyWithJsonPath = using(getConfiguration()).parse(jso);
    List<String> read = parsedBodyWithJsonPath.read("$.*");
    System.out.println("keys: "+read);

输出:

键:[“$['key1']”,“$['key2']”,“$['key3']”]


0
投票

如果您在将 kubectl 与 jsonpath= 结合使用时需要密钥,解决方法可能是让 jq 仅过滤密钥。

kubectl get secret my_secret --no-headers -o jsonpath='{.data}' | jq 'keys'
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.