Sco*_*and 4 parsing json google-cloud-platform kubernetes
如何解析json以从输出中检索字段
kubectl get pods -o json
Run Code Online (Sandbox Code Playgroud)
从命令行我需要从谷歌云集群中获取系统生成的容器名称...以下是来自上述命令的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)
我想避免文本解析输出
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)
如果要按标签过滤。你可以只使用 kubectl -l 标志。以下将执行相同的操作:
kubectl get pods -l name=web -o=jsonpath='{.items..metadata.name}'
| 归档时间: |
|
| 查看次数: |
9082 次 |
| 最近记录: |