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关键字global nonlocal区别

    简单了解python关键字global nonlocal区别

    这篇文章主要介绍了简单了解python关键字global nonlocal区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • python常用的各种排序算法原理与实现方法小结

    python常用的各种排序算法原理与实现方法小结

    这篇文章主要介绍了python常用的各种排序算法原理与实现方法,结合实例形式总结分析了冒泡排序、插入排序、选择排序、快速排序等排序算法的相关原理与实现方法,需要的朋友可以参考下
    2023-04-04
  • python静态方法实例

    python静态方法实例

    这篇文章主要介绍了python静态方法,实例分析了python静态方法的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • python使用wxPython打开并播放wav文件的方法

    python使用wxPython打开并播放wav文件的方法

    这篇文章主要介绍了python使用wxPython打开并播放wav文件的方法,涉及Python操作音频文件的相关技巧,需要的朋友可以参考下
    2015-04-04
  • Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)

    Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)

    这篇文章主要介绍了Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • pygame游戏之旅 载入小车图片、更新窗口

    pygame游戏之旅 载入小车图片、更新窗口

    这篇文章主要为大家详细介绍了pygame游戏之旅的第3篇,教大家如何载入小车图片、更新窗口,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • python笔记(1) 关于我们应不应该继续学习python

    python笔记(1) 关于我们应不应该继续学习python

    关于Python,如果你要学习,建议大家查看一下网站:因为本人也是刚刚决定收集点零碎时间来学习下它,推荐可能并不是最好的
    2012-10-10
  • Python中变量的输入输出实例代码详解

    Python中变量的输入输出实例代码详解

    这篇文章主要介绍了Python中变量的输入输出问题,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-07-07
  • python多进程共享Array问题

    python多进程共享Array问题

    multiprocessing库提供了Array类,允许在多个进程间共享数组,Array在共享内存中创建,各进程可直接访问和修改其元素,实现数据同步,Array支持多种数据类型,可选锁定参数以保证数据安全
    2024-09-09
  • python中pycurl库的用法实例

    python中pycurl库的用法实例

    这篇文章主要介绍了python中pycurl库的用法实例,可实现从指定网址读取网页的功能,需要的朋友可以参考下
    2014-09-09

最新评论