Python库:jq查询语法操作 JSON 数据 作者:马育民 • 2026-02-27 21:48 • 阅读:10002 # 介绍 `jq` 是 Python 对命令行工具 `jq` 的封装,核心作用是**用简洁的查询语法操作 JSON 数据**,相比原生 Python 遍历字典/列表处理 JSON,`jq` 语法更简洁、效率更高,尤其适合嵌套层级深的 JSON。 # 安装 首先需要安装 `jq` 库,打开终端执行: ```bash pip install jq ``` # 基础使用示例 下面用具体例子演示,覆盖最常用的场景(筛选字段、提取列表、嵌套数据查询): ```python 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].姓名` | # 应用场景 1. **批量处理学员数据**:从 JSON 格式的学员成绩单中,快速筛选优秀学员、提取姓名/班级等信息,批量生成证书文案; 2. **API 数据解析**:调用学校教务系统 API 后,用 jq 快速提取需要的学生数据,避免多层 `for` 循环和 `if` 判断; 3. **教学演示**:给学生演示 JSON 数据处理时,对比原生 Python 和 jq 的写法,体现简洁语法的优势。 # 总结 1. Python 的 `jq` 库是命令行 `jq` 工具的封装,核心用于**简洁高效处理 JSON 数据**,尤其适合嵌套结构和批量筛选; 2. 核心用法是 `jq.compile(查询语法).input(数据).all()/first()`,分别用于获取所有结果/单个结果; 3. 结合你的场景,可快速从学员 JSON 数据中筛选信息,批量生成符合00后风格的证书文案,提升办公效率。 原文出处:http://malaoshi.top/show_1GW2r8Yko9U0.html