Python中JSON与对象互转的完整指南

Cora
Cora
发布时间:2026-10-13| 7人浏览过
原创

本文详细介绍Python内置json库的使用方法,涵盖json.dumps、loads、dump、load四个核心API。重点解析字典与JSON字符串的互转,以及如何处理自定义类对象的序列化与反序列化问题,包括解决TypeError错误的default参数用法和object_hook回调机制。

Python JSON模块概述

Python标准库中内置了json模块,使用十分便捷。在当前开发环境中,JSON格式已成为数据交换的必备标准。

将Python对象转换为JSON字符串时,需遵循特定的类型映射规则。

Python与JSON类型转换规则

Python JSON
dict object
list, tuple array
str, unicode string
int, long, float number
True true
False false
None null

将JSON字符串解析为Python对象时,同样需要遵循对应的转换规则。

JSON Python
object dict
array list
string unicode
number (int) int, long
number (real) float
true True  
false False
null None

json模块核心API介绍

json模块主要提供以下四个核心API接口:

  • json.loads():用于将JSON字符串解析为Python字典。
  • json.dumps():用于将Python字典序列化为JSON字符串。
  • json.load():用于从JSON文件中读取内容并转换为Python字典。
  • json.dump():用于将Python字典写入指定的JSON文件(如person.json)。

需要注意的是,上述操作中的字典也可以由自定义类对象的属性构成。

字典与JSON字符串互转

演示如何将字典转换为JSON字符串。


import json

person = {
  'name': 'jack',
  'age': 15,
  'email': 'jack@litets.com'
}


print('dict:', person)

person_json = json.dumps(person) # 转换为json

print('json:', person_json)

运行结果如下:

dict: {'name': 'jack', 'age': 15, 'email': 'jack@litets.com'} json: {"name": "jack", "age": 15, 'email': 'jack@litets.com'}

演示如何将JSON字符串转换回字典。


import json
person_dict = json.loads('{"name": "jack", "age": 15, "email": "jack@litets.com"}')

print('person dict:', person_dict)

运行结果如下:

person dict: {'name': 'jack', 'age': 15, 'email': 'jack@litets.com'}

类对象序列化与反序列化

演示如何将自定义类对象转换为JSON字符串。


import json

class Person:

  def __init__(self, name, age, email):
    self.name = name
    self.age = age
    self.email = email


person = Person('tom', 38, 'tom@litets.com')

person_json = json.dumps(person.__dict__)

print('person json:', person_json)

运行结果如下:

person json: {"name": "tom", 'age': 38, 'email': 'tom@litets.com'}

若直接调用json.dumps()传递类实例,会触发TypeError: Object of type Person is not JSON serializable错误。为避免此错误,需采用以下修改方案:


import json
class Person:

  def __init__(self, name, age, email):
    self.name = name
    self.age = age
    self.email = email

# 将person转换为dict
def convert2json(person):
  return {
    'name': person.name,
    'age': person.age,
    'email': person.email
  }

person = Person('tom', 38, 'tom@litets.com')

# 第二个参数传递转换函数,或者使用default=lambda o: o.__dict__
person_json = json.dumps(person, default=convert2json)

print('person json:', person_json)

演示如何将JSON字符串转换回类对象。


import json

class Person:

  def __init__(self, name, age, email):
    self.name = name
    self.age = age
    self.email = email


def convert2json(dict_json):
  return Person(dict_json['name'], dict_json['age'], dict_json['email'])


person = json.loads('{"name": "tom", "age": 38, "email": "tom@litets.com"}', object_hook=convert2json)

print('person:', person)

运行结果如下:

person: <__main__.Person object at 0x10a7230b8>

loads函数仅能将JSON字符串转换为字典,若需恢复为对象,需手动进行转换处理。

JSON文件读写操作

演示如何将字典或对象数据写入JSON文件。


import 
person = {"name": "tom", "age": 38, "email": "tom@litets.com"}

with open('person.json', 'w') as f:
  json.dump(person, f)

执行后当前目录下将生成person.json文件,其内容如下:

{"name": "tom", 'age': 38, 'email': 'tom@litets.com'}

演示如何将JSON文件内容读取并转换为字典或对象。


import json
with open('person.json', 'r') as f:
  print(json.load(f))

运行结果如下:

{'name': 'tom', 'age': 38, 'email': 'tom@litets.com'}

以上内容为本文的全部介绍,希望能为读者的学习提供有益帮助,同时也欢迎大家继续支持本站。

相关标签:

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

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 算法库。