jq的仓库地址
jq的仓库地址
https://stedolan.github.io/jq/
jq简介
jq 是一个命令行 JSON 处理器,类似于 sed 或 grep,但专门设计用于处理 JSON 数据。如果是在日常任务中会用到 JSON 的开发人员或系统管理员,那么这是工具箱中必不可少的工具。
与 grep 和 sed 等通用文本处理工具相比,jq 的主要优点是它理解 JSON 的数据结构,允许使用单个表达式创建复杂的查询。
jq的使用
举例来说,假设试图在这个 JSON 文件中查找容器的名称:
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"labels": {
"app": "myapp"
},
"name": "myapp",
"namespace": "project1"
},
"spec": {
"containers": [
{
"command": [
"sleep",
"3000"
],
"image": "busybox",
"imagePullPolicy": "IfNotPresent",
"name": "busybox"
},
{
"name": "nginx",
"image": "nginx",
"resources": {},
"imagePullPolicy": "IfNotPresent"
}
],
"restartPolicy": "Never"
}
}
如果直接使用 grep 查找 name,则写法如下:
$ grep name k8s-pod.json
"name": "myapp",
"namespace": "project1"
"name": "busybox"
"name": "nginx",
grep 返回包含单词 name 的所有行。可以向 grep 添加更多选项来限制它,借助一些正则表达式操作来找到容器的名称。如果是使用 jq 获得想要的结果,则可以使用一个表达式来模拟向下导航数据结构,如下所示:
$ jq '.spec.containers[].name' k8s-pod.json
"busybox"
"nginx"
这个命令提供这两个容器的名称。如果只是在查找第二个容器的名称,则可以在表达式中添加数组元素索引:
$ jq '.spec.containers[1].name' k8s-pod.json
"nginx"
因为 jq 知道数据结构,所以即使文件格式稍有变化,它也能提供相同的结果。而只要格式稍有变化,grep 和 sed 就可能提供不同的结果。