jq 命令处理 JSON 备忘
【摘要】 jq 命令处理 JSON 备忘接口返回一堆 JSON,用 jq 在命令行里直接取字段、过滤数组,比贴到编辑器里翻要快得多。下面是日常最常用的几招。 取字与数组取顶层字段用号,取数组元素用下标,组合起来一次写完:echo "{\"name\": \"demo\", \"tags\": [\"a\", \"b\"]}" | jq ".name"echo "{\"items\": [{\"id\...
jq 命令处理 JSON 备忘
接口返回一堆 JSON,用 jq 在命令行里直接取字段、过滤数组,比贴到编辑器里翻要快得多。下面是日常最常用的几招。
取字与数组
取顶层字段用号,取数组元素用下标,组合起来一次写完:
echo "{\"name\": \"demo\", \"tags\": [\"a\", \"b\"]}" | jq ".name"
echo "{\"items\": [{\"id\": 1}, {\"id\": 2}]}" | jq ".items[0].id"
想把结果去掉引号、直接当纯文本用,加 -r:
echo "{\"name\": \"demo\"}" | jq -r ".name"
过滤与映射
用 select 过滤数组元素,用 map 只保留需要的字段:
echo "[{\"id\": 1, \"ok\": true}, {\"id\": 2, \"ok\": false}]" | jq "map(select(.ok))"
echo "[{\"id\": 1, \"name\": \"a\"}, {\"id\": 2, \"name\": \"b\"}]" | jq "map({id, name})"
安装与检查
大多数发行版自带包管理器都能直接装,装完先确认版本,再拿一小段 JSON 试手:
jq --version
echo "{\"a\": 1}" | jq ".a"
如果命令不存在,先装再用,不要把 JSON 贴进在线工里解析,本地命令行处理敏感返回更稳妥。
输出格式
默认输出带缩进,适合人阅读;想压成一行、方便后续用 grep 再过滤,加 -c:
echo "{\"a\": 1, \"b\": 2}" | jq -c "."
echo "{\"a\": 1}" | jq -c "{a}"
反过来,拿到压缩成一行的返回想看清结构,直接 jq "." 能格式化输出,排查接口字段很好用。
常见坑
- 字名带横线或数字开头时,不能直接用点号,要用
jq ".[\"my-key\"]"这种方括号写法。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)