Python中序列化/反序列化JSON格式的数据

简介: 【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
  1. 序列化(将 Python 对象转换为 JSON 字符串)
  • 使用json模块的dumps方法
  • 示例代码:


import json
data = {"name": "John", "age": 30, "city": "New York"}
json_str = json.dumps(data)
print(json_str)


  • 在这个示例中,首先定义了一个包含姓名、年龄和城市信息的字典data。然后使用json.dumps函数将这个字典转换为 JSON 字符串。dumps函数会将 Python 字典中的键和值转换为 JSON 格式的键值对,其中字符串会用双引号包裹,并且按照 JSON 的语法规则进行格式化。
  • 序列化其他 Python 对象类型
  • json模块还可以处理其他 Python 对象类型,如列表。例如:


import json
data_list = [1, 2, 3, {"key": "value"}]
json_str_list = json.dumps(data_list)
print(json_str_list)


  • 这里定义了一个包含整数和字典的列表data_listjson.dumps函数将其转换为 JSON 字符串。在 JSON 字符串中,列表元素会按照顺序排列,字典元素也会遵循 JSON 的格式规则。
  • 自定义序列化(处理特殊对象)
  • 有时候,我们可能需要对一些特殊的 Python 对象进行序列化,比如自定义的类。假设我们有一个简单的类Person


class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
p = Person("Alice", 25)


  • 直接使用json.dumps会报错,因为json模块不知道如何处理Person类的对象。我们可以定义一个函数来将Person对象转换为可以序列化的字典:


def person_to_dict(person):
    return {"name": person.name, "age": person.age}
json_str_person = json.dumps(p, default = person_to_dict)
print(json_str_person)


  • 或者使用lambda表达式:json_str_person = json.dumps(p, default = lambda o: o.__dict__),这里__dict__是 Python 对象的一个特殊属性,它返回一个包含对象属性和值的字典。


  1. 反序列化(将 JSON 字符串转换为 Python 对象)
  • 使用json模块的loads方法
  • 示例代码:


import json
json_str = '{"name": "Bob", "age": 20, "city": "London"}'
data = json.loads(json_str)
print(data)
print(data["name"])


  • 首先定义了一个 JSON 字符串json_str,然后使用json.loads函数将其转换为 Python 对象。在这个例子中,转换后的对象是一个字典,我们可以通过字典的键来访问相应的值,如data["name"]来获取姓名信息。
  • 反序列化 JSON 数组(列表)
  • 当 JSON 字符串表示一个数组时,json.loads会将其转换为 Python 列表。例如:


import json
json_str_list = '[1, 2, 3, {"key": "value"}]'
data_list = json.loads(json_str_list)
print(data_list)
print(data_list[3]["key"])


  • 这里的json_str_list是一个包含整数和字典的 JSON 数组。json.loads将其转换为 Python 列表后,我们可以通过索引来访问列表中的元素,对于字典元素,还可以通过键来访问值。
相关文章
|
11天前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
|
9天前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
22天前
|
传感器 物联网 开发者
使用Python读取串行设备的温度数据
本文介绍了如何使用Python通过串行接口(如UART、RS-232或RS-485)读取温度传感器的数据。详细步骤包括硬件连接、安装`pyserial`库、配置串行端口、发送请求及解析响应等。适合嵌入式系统和物联网应用开发者参考。
37 3
|
27天前
|
JSON JavaScript Java
对比JSON和Hessian2的序列化格式
通过以上对比分析,希望能够帮助开发者在不同场景下选择最适合的序列化格式,提高系统的整体性能和可维护性。
35 3
|
1月前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
27 1
|
16天前
|
XML JSON Kubernetes
什么是 YAML?:一种简洁高效的数据序列化格式
什么是 YAML?:一种简洁高效的数据序列化格式
50 0
|
22天前
|
数据采集 JavaScript 程序员
探索CSDN博客数据:使用Python爬虫技术
本文介绍了如何利用Python的requests和pyquery库爬取CSDN博客数据,包括环境准备、代码解析及注意事项,适合初学者学习。
61 0
|
23天前
|
数据采集 存储 分布式计算
超酷炫Python技术:交通数据的多维度分析
超酷炫Python技术:交通数据的多维度分析
|
1月前
|
索引 Python
SciPy 空间数据1
SciPy 通过 `scipy.spatial` 模块处理空间数据,如判断点是否在边界内、计算最近点等。三角测量是通过测量角度来确定目标距离的方法。多边形的三角测量可将其分解为多个三角形,用于计算面积。Delaunay 三角剖分是一种常用方法,可以对一系列点进行三角剖分。示例代码展示了如何使用 `Delaunay()` 函数创建三角形并绘制。
32 0
|
7月前
|
JSON 前端开发 Java
Json格式数据解析
Json格式数据解析
128 1