Python库:jq查询语法操作 JSON 数据

介绍

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].姓名

应用场景

  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后风格的证书文案,提升办公效率。

原文出处:/show_1GW2r8Yko9U0.html