Python处理JSON保持字段顺序的实现方案

 更新时间:2026年03月16日 09:53:28   作者:likuolei  
文章详细介绍了在Python中处理JSON时保持字段顺序的方法,包括JSON规范、Python版本的变化、常见方案和最佳实践,需要的朋友可以参考下

在 Python 中处理 JSON 时,是否保持字段顺序取决于两个因素:

  1. JSON 解析后使用的数据结构
  2. Python 版本

下面从 JSON规范 → Python实现 → 常见方案 → 最佳实践进行系统说明。

一、JSON 标准本身是否保证顺序?

根据 RFC 8259:

JSON object 是 unordered collection of name/value pairs

也就是说:

JSON 标准理论上不保证字段顺序。

例如:

{
  "a": 1,
  "b": 2,
  "c": 3
}

在语义上等价于:

{
  "c": 3,
  "a": 1,
  "b": 2
}

但是:

现实系统(API / 配置文件 / 前端)通常会依赖顺序

二、Python 3.7+ 的默认行为

Python 3.7 开始

dict

保证插入顺序(insertion order)

这一行为最早在 Python 3.6 的 CPython 实现中出现,并在 Python 3.7 成为官方语言规范。

示例:

import json
data = json.loads('{"a":1,"b":2,"c":3}')
print(data)

输出:

{'a': 1, 'b': 2, 'c': 3}

顺序保持。

因此:

Python 3.7+ 默认就能保持 JSON 字段顺序。

三、Python 3.6 以下版本解决方案

在旧版本中需要使用:

OrderedDict

来自:

collections

示例:

import json
from collections import OrderedDict
data = json.loads(
    '{"a":1,"b":2,"c":3}',
    object_pairs_hook=OrderedDict
)
print(data)

结果:

OrderedDict([('a', 1), ('b', 2), ('c', 3)])

关键参数:

object_pairs_hook

它接收:

[(key,value),(key,value)]

再转换为指定结构。

四、JSON 序列化保持顺序

当 Python → JSON 时:

import json
data = {
    "name": "Alice",
    "age": 20,
    "city": "Tokyo"
}
print(json.dumps(data))

输出:

{"name": "Alice", "age": 20, "city": "Tokyo"}

顺序与插入顺序一致。

如果想 按字典序排序

json.dumps(data, sort_keys=True)

输出:

{"age":20,"city":"Tokyo","name":"Alice"}

五、读取 JSON 时强制保持顺序

完整写法:

import json
from collections import OrderedDict

with open("data.json") as f:
    data = json.load(
        f,
        object_pairs_hook=OrderedDict
    )

这样即使:

  • Python旧版本
  • 第三方解析

也能保持顺序。

六、处理 JSON Schema / API 时的常见需求

很多场景需要 字段顺序固定

例如:

1 API返回

{
  "code": 200,
  "message": "ok",
  "data": {}
}

可以使用:

from collections import OrderedDict

resp = OrderedDict()
resp["code"] = 200
resp["message"] = "ok"
resp["data"] = {}

2 配置文件

例如:

{
  "database": {},
  "redis": {},
  "logging": {}
}

配置文件通常希望 按逻辑顺序显示

七、更快的 JSON 库(保持顺序)

一些高性能 JSON 库也保持顺序:

1 orjson

特点:

  • Rust实现
  • 超快
  • 保持 dict 顺序

示例:

import orjson

data = orjson.loads(b'{"a":1,"b":2}')

2 ujson

UltraJSON

import ujson

data = ujson.loads('{"a":1,"b":2}')

也保持顺序(Python3.7+)。

八、JSON字段顺序陷阱

1 dict 合并

a = {"a":1,"b":2}
b = {"c":3}

c = {**a, **b}

结果顺序:

a b c

2 更新字段

d = {"a":1,"b":2}

d["a"] = 100

顺序 不会改变

3 删除再插入

del d["a"]
d["a"] = 1

顺序变为:

b a

九、最佳实践

现代 Python 推荐:

Python 3.7+

直接使用:

dict

需要严格顺序

使用:

OrderedDict

读取 JSON

json.load(..., object_pairs_hook=OrderedDict)

十、一句话总结

Python 处理 JSON 保持字段顺序的方法:

方法适用版本
dictPython ≥3.7
OrderedDictPython ≤3.6
object_pairs_hook强制顺序

核心代码:

json.loads(json_str, object_pairs_hook=OrderedDict)

如果你愿意,我可以继续讲一个 很多 Python 工程师都忽略但在真实项目里很重要的问题

“为什么有些 JSON 在 Python 里顺序会突然乱掉?”

(涉及 dict重建、ORM序列化、FastAPI/Pydantic内部实现)。

以上就是Python处理JSON保持字段顺序的实现方案的详细内容,更多关于Python处理JSON保持字段顺序的资料请关注脚本之家其它相关文章!

相关文章

  • Python操作文件与HTML网页的入门指南

    Python操作文件与HTML网页的入门指南

    文章介绍了Python的os和sys库的基本用法,包括os.system命令执行、os.popen获取命令执行结果、sys库查询系统信息和接收命令行参数等,还介绍了HTML基础,包括HTML核心框架、常用标签、多媒体嵌入等,并给出了实战案例,需要的朋友可以参考下
    2026-03-03
  • python获取当前目录路径和上级路径的实例

    python获取当前目录路径和上级路径的实例

    下面小编就为大家分享一篇python获取当前目录路径和上级路径的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • 关于python返回值return用法详解

    关于python返回值return用法详解

    这篇文章主要介绍了python中的return关键字,包括其含义、作用、默认返回值、不同整数值的含义、返回值的类型、函数作为参数传递以及在类方法中的特殊情况,需要的朋友可以参考下
    2024-12-12
  • Python Pillow Image.save 保存为jpg图片压缩问题

    Python Pillow Image.save 保存为jpg图片压缩问题

    Pillow 库支持多种图片格式,Pillow 能够很轻松地实现图片格式之间的转换。本文就来详细的介绍一下Image.save的具体使用,感兴趣的可以了解一下
    2021-11-11
  • Python Pandas Dataframe.describe()使用及代码实例

    Python Pandas Dataframe.describe()使用及代码实例

    这篇文章主要介绍了Python Pandas Dataframe.describe()使用及代码实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 一文详细介绍numpy在python中的用法

    一文详细介绍numpy在python中的用法

    这篇文章主要介绍了numpy在python中的用法,NumPy是Python科学计算库,主要用于处理大型多维数组和矩阵运算,它提供了多种函数进行数组操作,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-01-01
  • python调用百度API实现人脸识别

    python调用百度API实现人脸识别

    这篇文章主要介绍了python调用百度API实现人脸识别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • python之Socket网络编程详解

    python之Socket网络编程详解

    这篇文章主要为大家详细介绍了python之Socket网络编程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • 使用Python制作一个恶意软件删除工具

    使用Python制作一个恶意软件删除工具

    这篇文章主要为大家详细介绍了如何使用Python制作一个恶意软件删除工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • python实现读取Excel内容并展示成json

    python实现读取Excel内容并展示成json

    这篇文章主要为大家详细介绍了如何使用python实现读取Excel内容并展示成json功能,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下
    2023-12-12

最新评论