我从外部系统获得以下 JSON 结果:
{
"key1": "val1",
"key2": "val2",
"key3": "val3"
}
现在我想使用 JSONPath 显示所有键和所有值。所以我正在寻找一些东西来获得 key1、key2 和 key3 作为结果。另外我想使用属性的索引,例如。 g。
$....[2].key
获取“key3”等。
有没有办法做这样的事情?
我发现 tilda
~
符号能够检索它所调用的值的键。因此,对于您的示例,查询如下:
$.*~
返回此:
[
"key1",
"key2",
"key3"
]
另一个例子,如果我们有一个像这样的 JSON 文档:
{
"key1": "val1",
"key2": "val2",
"key3": {
"key31":"val31",
"key32":"val32"
}
}
这样的查询:
$.key3.*~
会返回这个:
[
"key31",
"key32"
]
需要注意的是,这些示例适用于 JSONPath.com 和其他一些模拟器/在线工具,但在某些模拟器/在线工具上则不然。这可能是因为我在 JSONPath plus 文档中发现了 tilda(~) 运算符,而不是官方文档。
对于 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']”]
如果您在将 kubectl 与 jsonpath= 结合使用时需要密钥,解决方法可能是让 jq 仅过滤密钥。
kubectl get secret my_secret --no-headers -o jsonpath='{.data}' | jq 'keys'