Python CSV转JSON教程:表格导出为接口格式
把CSV表格转成JSON数组或指定结构,用csv模块或pandas to_json,支持指定根key、中文不转义,附完整代码。
场景痛点
前端要调接口拿数据,但手里只有一份CSV;或者要把CSV喂给只吃JSON的程序。手动一行行抄成JSON不可能,几万行点到崩溃。用Python把CSV读出来直接dump成JSON数组,还能套上对方要的外层结构。
用到的库
pip install pandas
完整代码
# Python CSV转JSON
import csv
import json
import pandas as pd
def csv_to_json_list(csv_path, json_path):
"""
用标准库csv读,转成list[dict],根是数组。
每行变成 {"列名": 值, ...}。
"""
rows = []
with open(csv_path, "r", newline="", encoding="utf-8-sig") as f:
reader = csv.DictReader(f)
for row in reader:
rows.append(row)
with open(json_path, "w", encoding="utf-8") as f:
json.dump(rows, f, ensure_ascii=False, indent=2)
print(f"标准库转换:{json_path},{len(rows)} 条")
def csv_to_json_with_wrap(csv_path, json_path, wrap_key="data"):
"""
套外层包装:{"code":0, "msg":"ok", "data": [...]}
模拟接口返回格式。
"""
df = pd.read_csv(csv_path, encoding="utf-8-sig")
payload = {
"code": 0,
"msg": "success",
"total": len(df),
wrap_key: df.to_dict(orient="records"),
}
with open(json_path, "w", encoding="utf-8") as f:
json.dump(payload, f, ensure_ascii=False, indent=2)
print(f"包装转换:{json_path},{len(df)} 条")
def csv_to_json_lines(csv_path, jsonl_path):
"""
转成JSON Lines格式(每行一个JSON对象),
适合流式处理、大文件传输。
"""
df = pd.read_csv(csv_path, encoding="utf-8-sig")
with open(jsonl_path, "w", encoding="utf-8") as f:
for record in df.to_dict(orient="records"):
f.write(json.dumps(record, ensure_ascii=False) + "\n")
print(f"JSONL转换:{jsonl_path},{len(df)} 行")
def main():
csv_file = "data.csv"
csv_to_json_list(csv_file, "output_list.json")
csv_to_json_with_wrap(csv_file, "output_wrap.json", wrap_key="data")
csv_to_json_lines(csv_file, "output.jsonl")
if __name__ == "__main__":
main()
代码讲解
csv.DictReader读出来每行就是dict,直接json.dump成数组。- pandas的
df.to_dict(orient="records")把DataFrame转成list[dict],一行一条。 wrap_key参数模拟接口返回结构,前端拿到直接.data取数组。- JSONL格式每行一个JSON对象,不需要整体解析,适合GB级数据流式处理。
ensure_ascii=False保证中文正常显示。
运行结果
当前目录生成三个文件:output_list.json 是纯数组;output_wrap.json 带code/msg/data外层;output.jsonl 每行一个JSON对象。打开看格式符合下游要求即可。
注意事项
- CSV里的数字读进来都是字符串,如果下游要数字类型,先
df["age"] = df["age"].astype(int)转换。 - 空单元格读进来是空字符串,转JSON后是
""而不是null,需要的话手动替换。 - 超大CSV不要一次性
json.dump整个列表,用JSONL逐行写更稳。 - 日期格式CSV里是字符串,转JSON不会自动变日期,下游按字符串解析即可。

更新时间:2026-09-14 21:02:27