You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Python脚本将多条或全部JSON对象导出为CSV?

解决CSV导出多条记录的问题

问题原因

你当前的代码在循环里每次调用normal_json.to_csv()时,默认会覆盖已有文件,所以最终CSV里只剩最后一条记录。

方案一:收集所有数据后统一导出(推荐)

先创建一个空列表,把每条记录处理后的DataFrame添加进去,循环结束后合并所有数据,再一次性导出到CSV。这样能保证数据结构一致,还能避免重复写入表头。

修改后的完整代码:

import pandas as pd
from openpyxl.workbook import Workbook
import csv
from pathlib import Path
from pandas.io.json import json_normalize
import json
from datetime import datetime
from datetime import date
from datetime import timedelta
import psycopg2
from psycopg2 import OperationalError
# Import our files
import pg  # Various functions to interface with the Postgres servers
from db_creds import *  # The DB server and user creds

# Connect to an existing database
connection = pg.create_connection(sourceDB_setting[3], sourceDB_setting[5], sourceDB_setting[6], sourceDB_setting[1], sourceDB_setting[2])
# Create a cursor to perform database operations
cursor = connection.cursor()
cursor.execute("SELECT application_data, id FROM ssap_applications LIMIT 10;")
results = cursor.fetchall()

# 创建空列表存储所有处理后的DataFrame
all_records = []

for row in results:
    jrec, app_id = row
    jrec = json.loads(jrec)
    normal_json = pd.json_normalize(jrec)
    # 可选:把原记录的id加入DataFrame,方便对应溯源
    normal_json['app_id'] = app_id
    print(normal_json)
    # 将当前记录的DataFrame加入列表
    all_records.append(normal_json)

# 合并所有DataFrame,重置索引
combined_df = pd.concat(all_records, ignore_index=True)
# 一次性导出到CSV
combined_df.to_csv('App_data2.csv', index=False, encoding='utf-8')

cursor.close()
connection.close()  # 记得关闭数据库连接,避免资源浪费

方案二:追加模式写入CSV

如果不想合并DataFrame,可以用mode='a'(追加模式),但要注意只有第一次写入时添加表头,后续写入跳过表头。

修改后的循环部分代码:

# 标记是否为第一次写入,控制表头输出
first_write = True

for row in results:
    jrec, app_id = row
    jrec = json.loads(jrec)
    normal_json = pd.json_normalize(jrec)
    normal_json['app_id'] = app_id
    print(normal_json)
    # 写入CSV:第一次写表头,后续不写
    normal_json.to_csv('App_data2.csv', 
                       index=False, 
                       encoding='utf-8',
                       mode='a',
                       header=first_write)
    # 第一次写入后,切换标记
    first_write = False

额外提示

  • 要是所有JSON记录结构不一致,合并后会出现空值列,需要提前处理结构差异。
  • 要导出全部记录,直接删掉SQL语句里的LIMIT 10就行。
  • 务必关闭数据库连接,避免占用数据库资源。

内容的提问来源于stack exchange,提问作者Anna Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:42:49