Python中如何将CSV文件转换为特定格式的JSON?

Snipaste_2018-06-21_22-22-02.png


Python中如何将CSV文件转换为特定格式的JSON?
18 回复

自己写规则转


核心思路: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')

关键点说明:

  1. csv.DictReader 自动将首行作为字段名,每行返回一个 OrderedDict
  2. 如果CSV中有数字、布尔值等需要特殊处理,在循环内手动转换类型。
  3. json.dumpindent 参数控制缩进,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,里面都是干货哦。

回到顶部