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 就可能提供不同的结果。
