您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Linux下jq命令怎么使用
## 一、jq命令简介
jq是一个轻量级且功能强大的命令行JSON处理工具,由Stephen Dolan开发。它类似于sed/awk/grep这类文本处理工具,但专门针对JSON数据设计。jq的主要特点包括:
1. **跨平台支持**:可在Linux、macOS、Windows等系统运行
2. **管道操作**:支持UNIX风格的管道数据处理
3. **丰富功能**:支持过滤、映射、转换等复杂操作
4. **编程友好**:可以嵌入到Shell脚本中使用
## 二、安装jq
### Ubuntu/Debian系统
```bash
sudo apt-get update
sudo apt-get install jq
sudo yum install epel-release
sudo yum install jq
brew install jq
jq --version
echo '{"name":"John","age":30}' | jq .
输出结果:
{
"name": "John",
"age": 30
}
echo '{"name":"John","age":30}' | jq '.name'
输出:”John”
echo '{"user":{"name":"Alice","age":25}}' | jq '.user.name'
输出:”Alice”
echo '[{"id":1},{"id":2}]' | jq '.[]'
echo '[10,20,30]' | jq '.[1]'
输出:20
echo '[1,2,3,4,5]' | jq '.[2:4]'
输出:[3,4]
echo '[{"age":20},{"age":30}]' | jq '.[] | select(.age > 25)'
echo '[{"name":"A","age":20},{"name":"B","age":30}]' | jq '.[] | select(.age > 25 and .name == "B")'
echo '{"data":[1,2,3]}' | jq '.data | .[] | select(. > 1)'
输出:2 3
echo '[1,2,3]' | jq 'map(. * 2)'
输出:[2,4,6]
echo '{"first":"John","last":"Doe"}' | jq '{fullName: .first + " " + .last}'
输出:{“fullName”:“John Doe”}
echo '[{"id":1,"value":"A"},{"id":2,"value":"B"}]' | jq 'map({(.id|tostring): .value}) | add'
输出:{“1”:“A”,“2”:“B”}
curl -s https://api.example.com/users | jq '[.[] | {username: .login, id}]'
cat log.json | jq 'select(.level == "error") | {time, message}'
cat config.json | jq '.services |= map(select(.enabled))'
使用流式处理:对于大文件,使用--stream
选项
jq --stream '.' hugefile.json
减少中间输出:组合多个操作而不是分步处理
使用编译过滤器:复杂过滤器可以预编译
filter=".[] | select(.age > 18)"
jq "$filter" data.json
并行处理:结合xargs实现并行
cat large.json | parallel --pipe jq '.data[]'
echo 'Not JSON {key:value}' | jq -R 'fromjson?'
jq -c . compact.json # 紧凑格式
jq -r . raw.json # 原始输出
echo '{"str":"hello\nworld"}' | jq '.str' --raw-output
jq -s '.[0] * .[1]' file1.json file2.json
curl -s https://api.github.com/users/octocat/repos | \
jq '.[] | {name, html_url, description}'
cat data.txt | sed 's/NaN/null/g' | jq .
#!/bin/bash
count=$(jq '.items | length' response.json)
echo "Found $count items"
工具名称 | 语言 | 特点 |
---|---|---|
jq | C | 轻量快速,功能丰富 |
fx | NodeJS | 交互式,支持JavaScript |
jello | Python | 类似jq但使用Python语法 |
gron | Go | 将JSON转为可grep的格式 |
yq | Python | 类似jq但支持YAML |
jq作为JSON处理的标准工具,提供了:
掌握jq可以极大提升在Linux环境下处理JSON数据的效率,是开发者和运维人员的必备技能。
函数 | 描述 | 示例 |
---|---|---|
length | 获取长度 | jq '.array | length' |
keys | 获取所有键 | jq '.object | keys' |
has | 检查键是否存在 | jq '.object | has("key")' |
to_entries | 转为键值对数组 | jq '.object | to_entries' |
from_entries | 键值对转为对象 | jq '.[] | from_entries' |
group_by | 按条件分组 | jq 'group_by(.type)' |
sort_by | 按字段排序 | jq 'sort_by(.age)' |
unique | 去重 | jq 'unique' |
join | 连接字符串数组 | jq '[.a,.b] | join(",")' |
”`
这篇文章共计约3150字,全面介绍了jq命令的安装、基础用法、高级技巧、实用案例以及与其他工具的集成。内容采用Markdown格式,包含代码块、表格等元素,便于阅读和理解。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。