我的知识记录

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不会自动变日期,下游按字符串解析即可。

Python CSV转JSON教程:表格导出为接口格式

标签:

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

上一篇:Python数据标准化归一化方法教程

下一篇:Python清洗CSV缺失值教程:填充或删除空值