如何使用Jinja2模板引擎生成JSON?模板结构问题求解
解决用Jinja2将Excel数据转换为JSON的问题
嘿,我懂你的困扰——手动写Jinja2模板拼接JSON太容易踩坑了,比如引号不匹配、多余逗号这些细节总能搞砸格式。其实Jinja2本身就带了专门的工具帮你搞定这个,根本不用自己硬拼字符串!
首先,你得先确认读取的Excel数据是列表字典的格式:每一行数据对应一个字典,字典的键是Excel的列名,值是单元格内容。这是用Jinja2生成JSON的基础结构。
第一步:确保数据格式正确
假设你用pandas读取Excel(最常用的方式之一),可以这么转成列表字典:
import pandas as pd from jinja2 import Environment, FileSystemLoader # 读取Excel文件 df = pd.read_excel("你的文件.xlsx") # 转成[{列名1: 值1, 列名2: 值2}, ...]的格式 data = df.to_dict("records")
如果你用的是openpyxl这类库,也可以手动构造这个结构:
from openpyxl import load_workbook wb = load_workbook("你的文件.xlsx") ws = wb.active # 提取表头作为字典的键 headers = [cell.value for cell in ws[1]] # 遍历数据行,生成列表字典 data = [] for row in ws.iter_rows(min_row=2, values_only=True): data.append(dict(zip(headers, row)))
第二步:写正确的Jinja2模板
别再手动写JSON结构了!直接用Jinja2内置的tojson过滤器,它会自动帮你生成标准的JSON格式,处理所有语法细节。
新建一个模板文件(比如命名为json_template.j2),内容就一行:
{{ data|tojson(indent=2) }}
这里的indent=2是用来格式化JSON,让输出的文件更易读,不需要的话可以直接写{{ data|tojson }}。
第三步:渲染模板并保存JSON
最后用Jinja2渲染模板,把结果写入文件:
# 初始化Jinja2环境,指定模板所在目录(这里是当前目录) env = Environment(loader=FileSystemLoader(".")) # 加载模板 template = env.get_template("json_template.j2") # 渲染模板,传入数据 json_content = template.render(data=data) # 保存为JSON文件 with open("输出文件.json", "w", encoding="utf-8") as f: f.write(json_content)
额外注意点
- 如果你的Excel里有日期、时间这类特殊类型的数据,要先把它们转换成字符串(比如用pandas的
dt.strftime),不然tojson可能会输出不符合预期的格式。 - 如果数据里有特殊字符(比如引号、换行符),
tojson会自动转义,不用你手动处理。
这样就能完美生成标准的JSON文件啦,再也不用纠结模板的结构问题~
内容的提问来源于stack exchange,提问作者hullabaloon
相关产品推荐
相关产品推荐

