如何使用jsonpath解析json格式输出:kubectl get pods

Sco*_*and 4 parsing json google-cloud-platform kubernetes

如何解析json以从输出中检索字段

kubectl get pods -o json
Run Code Online (Sandbox Code Playgroud)

从命令行我需要从谷歌云集群中获取系统生成的容器名称...以下是来自上述命令的json输出的显着位: 在此输入图像描述

点击这里查看整个json输出

因此,最顶层的json键是一个数组:items []后跟metadata.labels.name,其中该复合键的搜索critera值为"web"(参见上图绿色标记).在比赛中,我需要检索字段

.items[].metadata.name  
Run Code Online (Sandbox Code Playgroud)

这恰好有价值:

web-controller-5e6ij   // I need to retrieve this value
Run Code Online (Sandbox Code Playgroud)

这是关于jsonpath的文档

我想避免文本解析输出

kubectl get pods
Run Code Online (Sandbox Code Playgroud)

是的

NAME                     READY     STATUS    RESTARTS   AGE
mongo-controller-h714w   1/1       Running   0          12m
web-controller-5e6ij     1/1       Running   0          9m
Run Code Online (Sandbox Code Playgroud)

以下将正确解析此get pods命令,但我觉得它太脆弱了

kubectl get pods | tail -1 | cut -d' ' -f1
Run Code Online (Sandbox Code Playgroud)

Sco*_*and 10

经过多次争斗后,这个衬里确实检索了容器名称:

kubectl get pods -o=jsonpath='{.items[?(@.metadata.labels.name=="web")].metadata.name}'
Run Code Online (Sandbox Code Playgroud)

当这是已知的搜索条件时:

items[].metadata.labels.name  == "web"
Run Code Online (Sandbox Code Playgroud)

这是要检索的所需字段

items[].metadata.name  :  "web-controller-5e6ij"
Run Code Online (Sandbox Code Playgroud)


Bun*_*986 5

如果要按标签过滤。你可以只使用 kubectl -l 标志。以下将执行相同的操作:

kubectl get pods -l name=web -o=jsonpath='{.items..metadata.name}'

  • 没有人提到用“..”来打印数组。很有帮助! (2认同)