Python中JSON模块的使用:序列化与反序列化详解

唐可
唐可
发布时间:2026-10-15| 4人浏览过
原创

本文详细介绍Python内置json模块的使用方法,涵盖将JSON字符串转换为Python对象(反序列化)以及将Python对象转换为JSON字符串(序列化)的核心操作。重点解析json.loads、json.load、json.dumps和json.dump四个关键函数的参数配置,包括ensure_ascii、indent和sort_keys的具体作用,帮助开发者高效处理数据交换格式。

将JSON格式的数据转换为Python内部数据结构的过程被称为反序列化。

相反地,将Python对象转换为JSON字符串格式的过程称为序列化。

json是Python标准库中的内置模块,无需额外安装即可直接使用。

json模块支持的数据类型映射如下:

Json Python
对象(object) 字典(dict)
数组(array) 列表(list)
字符串(string) 字符串(str)
整数(int) 整数(int)
实数(float) 实数(float)
true True
false False
null None

具体代码实现示例如下:

1. 将JSON数据转换为Python对象

json模块提供了两个主要函数,用于将JSON字符串反序列化为Python对象。

json.loads(s) 其中参数s代表输入的JSON字符串。


import json

str_json = '{"name":"张三","age":24}'
res = json.loads(str_json)
print(res, type(res))  #{'name': '张三', 'age': 24} <class 'dict'>

json.load(fb) 其中fb代表一个已打开的文件对象,例如test.json文件。

test.json


{
  "name":"张三",
  "age":24,
  "friends": [{
    "name": "李四",
    "age": 23
  },
    {
      "name": "王麻子",
      "age": 24
    }],
  "hobby": ["玩游戏","看电影"]
}

import json

with open('test.json', 'r', encoding='utf-8') as f:
    res = json.load(f)
    print(res, type(res))
  # {'name': '张三', 'age': 24, 'friends': [{'name': '李四', 'age': 23}, {'name': '王麻子', 'age': 24}], 'hobby': ['玩游戏', '看电影']} <class 'dict'>

JSON字符串在实际应用中通常不会单独存在。


json.loads('"test"')  #'test'

它们通常被包含在字典或列表等Python数据结构中。


json.loads('["test1","test2","test3"]')  #['test1','test2','test3']

2. 将Python对象序列化为JSON字符串

json.dumps(obj,ensure_ascii=True,indent=None,sort_keys=False)

  • obj:代表需要转换的Python对象。
  • ensure_ascii:默认值为True,确保输出中包含的所有非ASCII字符都被转义。如果将此参数设为False,这些字符将按原样输出。
  • indent:接受非负整数或字符串。若指定为JSON数组元素和对象成员的缩进等级,则按该值进行美化输出。若值为零、负数或空字符串,仅添加换行符。默认值None选择最紧凑的表达方式。指定正整数可使每一层缩进相同数量的空格。若指定为字符串(如"\t"),则该字符串用于每层的缩进。
  • sort_keys:设为True(默认False)时,字典输出将按键的顺序进行排序。

import json

data = {
  "name":"张三",
  "age":24,
  "friends": [{
    "name": "李四",
    "age": 23
  },
    {
      "name": "王麻子",
      "age": 24
    }],
  "hobby": ["玩游戏","看电影"]
}
res = json.dumps(data,ensure_ascii=False,indent=2, )
print(res, type(res))

打印输出的结果如下:

{ "name": "张三", "age": 24, "friends": [ { "name": "李四", "age": 23 }, { "name": "王麻子", "age": 24 } ], "hobby": [ "玩游戏", "看电影" ] } <class 'str'>

json.dump(obj,fb,ensure_ascii=True,indent=None,sort_keys=False)

  • obj:代表需要序列化的Python对象。
  • fb:代表以文本写入模式打开的文件对象。

import json

data = {
  "name":"张三",
  "age":24,
  "friends": [{
    "name": "李四",
    "age": 23
  },
    {
      "name": "王麻子",
      "age": 24
    }],
  "hobby": ["玩游戏","看电影"]
}
with open('test1.json', 'w', encoding='utf-8') as f:
    json.dump(data, fp=f, ensure_ascii=False, indent=2)

写入文件后的结果如下:

test1.json


{
  "name": "张三",
  "age": 24,
  "friends": [
    {
      "name": "李四",
      "age": 23
    },
    {
      "name": "王麻子",
      "age": 24
    }
  ],
  "hobby": [
    "玩游戏",
    "看电影"
  ]
}

总结

以上就是本文的全部内容,希望能对大家有所帮助,也欢迎大家关注本站获取更多技术内容!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。