json转csv Python

博客介绍了将JSON数据转化为CSV表格存储的需求,在网上未找到合适方法后,博主通过努力用Python编写代码实现了该功能,代码可直接使用,只需修改文件地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python json 转换成 Excel 的实现方式

json文档示例如下

我们要将例如:

{“name”:“张三”,“phone”:“12345678901”, “id_card”:“90897832746”}
{“name”:“王五”,“phone”:“23456789012”, “id_card”:“78901234567”}

假设我们有一个.txt文件中有这种数据转化成csv的表格存储像这样:


namephoneid_card
张三1234567890190897832746
王五2345678901278901234567

通过网上的查找,好像没有找到合适的json的方法或者网站,呐自己试一试看能不能完成这个东西。
经过努力写出了方法如下:(直接拿去就能用,改一下文件的地址)

Python代码
	# !/usr/bin/env/python
# coding: utf-8

"""
@File       :mismatch_json.py
@auth       :sx
@Date       :2019/5/16
@Desc       :
"""
import numpy as np
import os
import json
import pandas as pd
import logging


def json_to_df(line):
    columns = []
    values = []
    if isinstance(line, tuple):
        print(line)
        return line
    # print("函数中的line{}".format(type(line)))
    for k, v in line.items():
        if isinstance(v, dict):
            # print("v的数据类型{}".format(v))
            temp_c, temp_v = json_to_df(v)
            columns = columns + [x for x in temp_c]
            values = values + [x for x in temp_v]
        elif isinstance(v, list):
            for var in v:
                json_to_df(var)
        else:
            columns = columns + [k]
            values = values + [v]
    return columns, values

os.getcwd()
path = 'D:/json.txt'
with open(path, encoding='utf-8') as file:
    data = file.readlines()
columns_bin = []
value_bin = []
for line in data:
    if line == '\n':
        pass
    else:
        line = line.replace('\n', '')
        # 1、读到每一条json数据
        df = json.loads(line)
        # 2、将json数据解析成 数据框
        columns, values = json_to_df(df)
        # 3、将返回的数据加到一个新的数据框
        columns_bin = columns_bin + [columns]
        value_bin = value_bin + [values]
logging.info("找到所有列的名称并集")
# 4、找到所有列的名称并集
col = []
for c in columns_bin:
    col = list(set(c + col))
    logging.info("创建含有全部列名的打他frame")
# 5、创建含有全部列名的打他frame
df_god = pd.DataFrame(columns=col)
for n, var in enumerate(columns_bin):
    dict_god = {}
    for m, v in enumerate(var):
        print("正在转换第{}各变量名{}".format(m, v))
        dict_god.update({v: value_bin[n][m]})
    dict_god = pd.DataFrame(dict_god, index=[n])
    df_god = df_god.append(dict_god)

logging.info("输出文件")
df_god.to_csv("hahahh.csv")


上面就是我的代码,能将json转成csv保存。

### JSONCSV的实现方法 以下是将JSON数据换为CSV格式的一种常见方式。此过程涉及解析JSON结构并将其中的数据映射到表格形式,最终保存为CSV文件。 #### 解析与换逻辑 在处理JSON数据时,通常会遇到两种主要情况: 1. **扁平化的JSON对象**:可以直接对应于二维表中的行和列。 2. **嵌套的JSON对象**:需要先展平(flatten),再进行换。 下面提供了一个通用的解决方案来完成这一任务: ```python import csv import json # 定义一个函数用于将JSON数据写入CSV文件 def write_json_to_csv(json_data, output_file): """ 将JSON数据换为CSV文件 参数: json_data (list of dict): 输入的JSON数据,应为字典列表的形式 output_file (str): 输出的CSV文件名 """ # 如果输入不是列表,则尝试将其封装成单元素列表 if not isinstance(json_data, list): json_data = [json_data] # 获取所有可能的键作为字段名称 fieldnames = set() for item in json_data: fieldnames.update(item.keys()) # 使用编码兼容模式打开目标CSV文件 with open(output_file, 'w', newline='', encoding='utf-8') as csvfile: writer = csv.DictWriter(csvfile, fieldnames=sorted(fieldnames)) # 写入头部信息 writer.writeheader() # 遍历每条记录并写入CSV文件 for row in json_data: writer.writerow(row) # 示例主程序 if __name__ == "__main__": # 假设这是从某个地方加载得到的JSON数据 sample_json = [ {"id": 1, "name": "Alice", "age": 25}, {"id": 2, "name": "Bob", "age": 30} ] # 调用函数执行换 write_json_to_csv(sample_json, "output.csv") ``` 上述代码实现了以下功能: - 接受JSON数据作为输入,并支持单一对象或对象数组[^1]。 - 动态检测所有的字段名称以适应不同结构的JSON数据[^2]。 - 利用`csv.DictWriter`类高效地将字典数据写入CSV文件中。 #### 处理复杂场景 对于更复杂的嵌套JSON结构,可以引入第三方库如`pandas`简化操作流程。例如: ```python import pandas as pd # 加载JSON数据 data = [{"id": 1, "details": {"name": "Alice", "age": 25}}, {"id": 2, "details": {"name": "Bob", "age": 30}}] # 展开嵌套结构 df = pd.json_normalize(data) # 导出至CSV文件 df.to_csv("complex_output.csv", index=False) ``` 这种方法利用了Pandas强大的数据分析能力自动展开多层嵌套关系[^2]。 --- ### 问题
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值