自己写规则转
核心思路: 用 csv.DictReader 逐行读取CSV,然后按你的格式要求构建字典,最后用 json.dump 写出。
假设你的CSV格式如下(data.csv):
id,name,age,city
1,Alice,30,New York
2,Bob,25,London
目标JSON格式(每个记录一个对象,放在数组里):
[
{
"id": 1,
"name": "Alice",
"age": 30,
"city": "New York"
},
{
"id": 2,
"name": "Bob",
"age": 25,
"city": "London"
}
]
完整代码:
import csv
import json
def csv_to_json(csv_file_path, json_file_path):
data = []
# 读取CSV文件
with open(csv_file_path, mode='r', encoding='utf-8') as csv_file:
csv_reader = csv.DictReader(csv_file)
# 逐行转换为字典并添加到列表
for row in csv_reader:
# 如果需要类型转换(例如id和age转为整数)
row['id'] = int(row['id'])
row['age'] = int(row['age'])
data.append(row)
# 写入JSON文件
with open(json_file_path, mode='w', encoding='utf-8') as json_file:
json.dump(data, json_file, indent=2, ensure_ascii=False)
# 使用示例
csv_to_json('input.csv', 'output.json')
关键点说明:
csv.DictReader自动将首行作为字段名,每行返回一个OrderedDict。- 如果CSV中有数字、布尔值等需要特殊处理,在循环内手动转换类型。
json.dump的indent参数控制缩进,ensure_ascii=False保证中文等非ASCII字符正常显示。
如果你的JSON格式要求不同(比如需要嵌套结构),告诉我具体格式,我帮你改代码。
总结:用csv模块读,按需处理数据,再用json模块写。
: )
哈哈哈,面试题,我有源代码,当时写了很久
要不要老哥帮帮你?
要的要的
一开始用 golang 写,发现太蛋疼了,这种灵活的格式还是动态语言方便
https://trinket.io/python/3b6f1679d2
你也可以选择不补数据,在转换的期间再搜索缺失的 key 值
再改一次,大晚上脑子不清醒 https://trinket.io/python/dc0a87c0e3
写过一个干这事儿的库。
难点不是转换,是保证 json 结构能对的上 csv,或者对不上的部分可以丢弃
假设输入合法,写了一个极其简陋的做法
https://ideone.com/69YPy4
go 我记得也不难 写个 struct 打上 json csv 的 tag,然后用 csv 反序列化 json 序列化就好
这是个动态结构,你用 golang 试试呢,我没找到方便的做法。[]map[string][]interface{}深入到内部节点还得断言,就没继续写了
。。。LZ 的 json 还多写了一行,害我研究一大会!
咋一看,没懂规则是个啥。。。
不过 简单点,先转成个树(结点), 再把树序列化成 json
https://github.com/Colaplusice/Homework 我的数据集要比你的多一些,也能找出一些不太好找的 bug.顺便推销一波 github,里面都是干货哦。


