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

如何让Pandas保留JSON原字段顺序导出Excel?

保留JSON原始字段顺序导出Excel的解决方案

我完全懂你遇到的这个闹心问题——用Pandas把JSON转Excel时,原本好好的字段顺序会被自动打乱,导出的Excel列顺序和原JSON完全对不上。下面针对你提到的两种JSON格式(单个对象、对象数组),分别给出靠谱的解决办法,核心思路就是先锁定原始JSON的字段顺序,再强制Pandas按这个顺序生成DataFrame和Excel。

情况1:单个JSON对象(非数组)

你的原始代码里,pd.read_json()默认会对列进行排序。我们换个思路,先把JSON字符串解析成Python字典(Python3.7+的字典天生是插入有序的),拿到原始字段顺序后再创建DataFrame:

import pandas as pd
import json

# 你的原始JSON字符串
json_text = '{"b": 22, "x": 12, "a": 2, "c": 4}'

# 解析为有序字典(Python3.7+默认保留插入顺序)
data_dict = json.loads(json_text)
# 提取原始字段顺序
original_columns = list(data_dict.keys())

# 强制按原始顺序创建DataFrame
df = pd.DataFrame([data_dict], columns=original_columns)

# 导出Excel(和你原来的导出逻辑一致)
file_name = 'test.xls'
file_path = "/tmp/" + file_name
df.to_excel(file_path, index=False)
print("path to excel " + file_path)

这样导出的Excel就会严格保留b, x, a, c的原始顺序,不会被Pandas自动排序。

情况2:JSON对象数组

对于数组形式的JSON,我们只需要从第一个对象里提取原始字段顺序(假设数组里所有对象的字段顺序一致),再用同样的方式强制指定列顺序即可:

import pandas as pd
import json

# 你的原始JSON数组字符串
json_text = '[{"b": 22, "x":12, "a": 2, "c": 4}, {"b": 22, "x":12, "a": 2, "c": 2}, {"b": 22, "x":12, "a": 4, "c": 4}]'

# 解析为有序对象列表
data_list = json.loads(json_text)
# 从第一个对象获取原始字段顺序
original_columns = list(data_list[0].keys())

# 按原始顺序创建DataFrame
df = pd.DataFrame(data_list, columns=original_columns)

# 导出Excel
file_name = 'test_array.xls'
file_path = "/tmp/" + file_name
df.to_excel(file_path, index=False)
print("path to excel " + file_path)

额外说明(兼容旧Python版本)

如果你的Python版本是3.6及以下(这些版本的普通字典是无序的),可以用collections.OrderedDict来确保解析后的字段顺序不变,只需要修改解析那一行:

from collections import OrderedDict
data_dict = json.loads(json_text, object_pairs_hook=OrderedDict)
# 数组的情况同理:data_list = json.loads(json_text, object_pairs_hook=OrderedDict)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:50:31