介绍
jq 是 Python 对命令行工具 jq 的封装,核心作用是用简洁的查询语法操作 JSON 数据,相比原生 Python 遍历字典/列表处理 JSON,jq 语法更简洁、效率更高,尤其适合嵌套层级深的 JSON。
安装
首先需要安装 jq 库,打开终端执行:
pip install jq
基础使用示例
下面用具体例子演示,覆盖最常用的场景(筛选字段、提取列表、嵌套数据查询):
import jq
import json
# 示例 JSON 数据(模拟优秀学员证书的批量数据)
json_data = '''
{
"优秀学员列表": [
{"姓名": "张三", "班级": "计科2101", "分数": 95, "获奖类型": "学习标兵"},
{"姓名": "李四", "班级": "软工2102", "分数": 92, "获奖类型": "优秀学员"},
{"姓名": "王五", "班级": "计科2101", "分数": 88, "获奖类型": "优秀学员"}
],
"颁发单位": "计算机学院",
"颁发时间": "2026年6月"
}
'''
# 第一步:解析 JSON 字符串为 Python 对象(也可以直接用 jq 处理字符串)
data = json.loads(json_data)
# 场景1:提取所有优秀学员的姓名(jq 语法:.优秀学员列表[].姓名)
names = jq.compile('.优秀学员列表[].姓名').input(data).all()
print("所有优秀学员姓名:", names) # 输出:['张三', '李四', '王五']
# 场景2:筛选分数≥90的优秀学员(jq 语法:.优秀学员列表[] | select(.分数 >= 90))
top_students = jq.compile('.优秀学员列表[] | select(.分数 >= 90)').input(data).all()
print("分数≥90的学员:", top_students)
# 输出:[{'姓名': '张三', '班级': '计科2101', '分数': 95, '获奖类型': '学习标兵'}, {'姓名': '李四', '班级': '软工2102', '分数': 92, '获奖类型': '优秀学员'}]
# 场景3:提取颁发单位(简单字段查询)
dept = jq.compile('.颁发单位').input(data).first()
print("颁发单位:", dept) # 输出:计算机学院
# 场景4:批量生成证书文案(结合00后风格)
cert_template = '''{姓名}同学:
在本期学习中表现优异,被评为【{获奖类型}】。
愿你保持热爱,奔赴山海!
——{颁发单位} {颁发时间}'''
# 先用 jq 提取需要的字段,再拼接文案
students = jq.compile('.优秀学员列表[]').input(data).all()
for s in students:
s['颁发单位'] = dept
s['颁发时间'] = jq.compile('.颁发时间').input(data).first()
print(cert_template.format(**s))
print("-" * 50)
输出结果示例:
所有优秀学员姓名: ['张三', '李四', '王五']
分数≥90的学员: [{'姓名': '张三', '班级': '计科2101', '分数': 95, '获奖类型': '学习标兵'}, {'姓名': '李四', '班级': '软工2102', '分数': 92, '获奖类型': '优秀学员'}]
颁发单位: 计算机学院
张三同学:
在本期学习中表现优异,被评为【学习标兵】。
愿你保持热爱,奔赴山海!
——计算机学院 2026年6月
--------------------------------------------------
李四同学:
在本期学习中表现优异,被评为【优秀学员】。
愿你保持热爱,奔赴山海!
——计算机学院 2026年6月
--------------------------------------------------
王五同学:
在本期学习中表现优异,被评为【优秀学员】。
愿你保持热爱,奔赴山海!
——计算机学院 2026年6月
--------------------------------------------------
核心 jq 语法
| jq 语法 | 作用 | 示例 | ||
|---|---|---|---|---|
.字段名 |
提取指定字段 | .颁发单位 |
||
.列表[] |
遍历列表所有元素 | .优秀学员列表[] |
||
| `[] | select(条件)` | 筛选列表中符合条件的元素 | `.优秀学员列表[] | select(.分数 >= 90)` |
.列表[0] |
提取列表第1个元素(索引从0开始) | .优秀学员列表[0].姓名 |
应用场景
- 批量处理学员数据:从 JSON 格式的学员成绩单中,快速筛选优秀学员、提取姓名/班级等信息,批量生成证书文案;
- API 数据解析:调用学校教务系统 API 后,用 jq 快速提取需要的学生数据,避免多层
for循环和if判断; - 教学演示:给学生演示 JSON 数据处理时,对比原生 Python 和 jq 的写法,体现简洁语法的优势。
总结
- Python 的
jq库是命令行jq工具的封装,核心用于简洁高效处理 JSON 数据,尤其适合嵌套结构和批量筛选; - 核心用法是
jq.compile(查询语法).input(数据).all()/first(),分别用于获取所有结果/单个结果; - 结合你的场景,可快速从学员 JSON 数据中筛选信息,批量生成符合00后风格的证书文案,提升办公效率。