当前位置: 首页 > java >正文

Python中的JSON库,详细介绍与代码示例

目录

1. 前言

2. json 库基本概念

3. json 的适应场景

4. json 库的基本用法

4.1 导 json入 模块

4.2 将 Python 对象转换为 JSON 字符串

4.3 将 JSON 字符串转换为 Python 对象

4.4 将 Python 对象写入 JSON 文件

4.5 从 JSON 文件读取数据

4.6 json 的其他方法

5. json 库的高级用法

5.1 自定义对象的序列化与反序列化在

5.2 处理非 ASCII 字符

5.3 使用 indent 参数美化输出

6. json 库的异常处理

6.1 常见的异常类型

6.2 异常处理示例

7. 总结


1. 前言

在我们日常的 Python 编程中,数据的存储与传递是不可避免的一个环节。想象一下,我们在开发一个应用程序时,需要将一些配置信息存储起来,或者要将数据发送到另一个系统中。这时候,我们就需要一种高效、便捷的方式来完成这个。任务JSON(JavaScript Object Notation),作为一种轻量级的数据交换格式,正好能满足我们的需求。而 Python 中的 json 库,则为我们提供了简单易用的接口来处理 JSON 数据。

2. json 库基本概念

JSON 是一种基于文本格式的数据表示方法,易于和阅读编写,同时也易于机器解析和生成。它基于 JavaScript 的一个子集,但已经成为一种独立的数据格式,被广泛应用于各种编程语言中。在 Python 中,json 库就是专门用于处理 JSON 数据的。

JSON 数据结构主要包括以下两种基本类型:

        对象 (Object) :一组无序的键值对,类似于 Python 中的字典。例如:{"name": "John", "age": 30},其中 "name" 和 "age" 是键,对应的值分别是 "John" 和 30 。

        数组(Array) :一个有序的值的集合,类似于 Python 中的列表。例如:[1, 2, 3, 4]

json 库的核心功能就是实现 Python 数据类型与 JSON 数据类型的相互转换。

3. json 的适应场景

  • 数据存储 :将数据以 JSON 格式存储到文件或数据库中,便于后续读取和修改。例如,保存配置文件、用户数据等。

  • 数据交换 :在不同的系统或组件之间传递数据,特别是在 开 Web发中,前后端之间常用 JSON 格式进行数据交互。

  • API 数据处理 :许多 Web API 返回的数据都是 JSON 格式,使用 json 库可以方便地解析和处理这些数据。

4. json 库的基本用法

4.1 导 json入 模块

在 Python 中,我们可以直接使用内置的 json 模块,无需额外安装。通过以下代码导入 json 模块:

import json

4.2 将 Python 对象转换为 JSON 字符串

使用 json.dumps() 方法将可以 Python 对象(如字典、列表等)转换为 JSON 格式的字符串。这个方法的语法如下:

json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None default,=None, sort_keys=False, **kw)

其中,obj 是要转换的 Python 对象,其他参数用于控制转换过程中的各种选项。

示例

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

输出结果:

{"name": "John", "age": 30, "city": "New York"}

可以看到,Python 字典被成功转换为 JSON 格式的字符串。

4.3 将 JSON 字符串转换为 Python 对象

使用 json.loads() 方法可以将 JSON 格字符串式的转换为 Python 对象。这个方法的语法如下:

json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

其中,s 是 JSON 格式的字符串。

示例

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

输出结果:

{'name': 'John', 'age': 30, 'city': 'New York'}
<class 'dict'>

JSON 字符串被转换为 字 Python典。

4.4 将 Python 对象写入 JSON 文件

使用 json.dump() 方法可以直接将 Python 对象写入到 JSON 文件中。这个方法的语法如下:

json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

其中,obj 是要写入的 Python 对象,fp 是一个文件对象。

示例

data = {"name": "John","age": 30,"city": "New York"
}with open("data.json", "w") as f:json.dump(data, f)

这段代码将 Python 字典写入到名为 “data.json” 的文件中。

4.5 从 JSON 文件读取数据

使用 json.load() 方法可以从 JSON 文件中读取数据并转换为 Python 对象。这个方法的语法如下:

json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

其中,fp 是一个文件对象。

示例

with open("data.json", "r") as f:data = json.load(f)print(data)

读取 “data.json” 文件中的数据并打印出来。

4.6 json 的其他方法

除了上述常用的 dumps()loads()dump()load() 方法外,json 库还提供了一些其他方法和常量,用于处理特殊情况。

  • json.JSONEncoderjson.JSONDecoder:这两个类分别用于自定义 JSON 编码器和解码器,可以处理一些特殊的类型转换问题。

  • json.JSONDecodeError:当解析 JSON 数据出错时,会抛出这个异常,我们可以使用它来进行错误处理。

5. json 库的高级用法

5.1 自定义对象的序列化与反序列化在

实际开发中,我们可能会遇到需要序列化自定义对象的情况。默认情况下,json 库无法直接序列化自定义对象,但我们可以自定义一个编码器来实现这个功能。

import jsonclass Person:def __init__(self, name, age):self.name = nameself.age = ageclass PersonEncoder(json.JSONEncoder):def default(self, obj):if isinstance(obj, Person):return {"name": obj.name, "age": obj.age}return super().default(obj)person = Person("John", 30)
json_str = json.dumps(person, cls=PersonEncoder)
print(json_str)

输出结果:

{"name": "John", "age": 30}

我们可以看到通过,自定义编码器,成功将自定义的 Person 对象序列化为 JSON 字符串。同样地,我们也可以通过自定义解码器来实现 JSON 字符串到自定义对象的反序列化。

5.2 处理非 ASCII 字符

在处理包含非 ASCII 字符的 JSON 数据时,我们可以使用 ensure_ascii 参数来控制是否将非 ASCII 字符转义。默认情况下,ensure_ascii 参数为 True,非 ASCII 字符会被转义为 Unicode 编码。

data = {"name": "张三", "city": "北京"}
json_str = json.dumps(data, ensure_ascii=False)
print(json_str)

输出结果:

{"name": "张三", "city": "北京"}

ensure_ascii 参数为 False 时,非 ASCII 字符会以原始形式输出,这样更便于阅读和理解。

5.3 使用 indent 参数美化输出

在调试或阅读 JSON 数据时,我们可以通过设置 indent 参数来美化 JSON 输出的格式,使其更易于和阅读。indent 参数指定了缩进的空格数。

data = {"name": "John","age": 30,"hobbies": ["reading", "traveling", "sports"]
}json_str = json.dumps(data, indent=4)
print(json_str)

输出结果:

{"name": "John","age": 30,"hobbies": ["reading","traveling","sports"]
}

可以看到,通过设置 indent 参数,输出的 JSON 数据格式更加清晰美观。

6. json 库的异常处理

在使用 json 库进行数据处理时,可能会遇到一些异常情况例如,无效的 JSON 格式、不支持的数据类型等。我们需要对这些异常进行有效的处理,以确保程序的健壮性。

6.1 常见的异常类型

  • json.JSONDecodeError:当解析 JSON 数据出错时抛出,例如 JSON 格式不正确。

  • TypeError:当尝试序列化一个不支持的数据类型时抛出。

6.2 异常处理示例

import jsonjson_str = '{"name": "John", "age": 30, "hobbies": ["reading", "traveling"]'
try:data = json.loads(json_str)
except json.JSONDecodeError as e:print(f"JSON 解码错误:{e}")
except Exception as e:print(f"发生错误:{e}")

输出结果:

JSON 解码错误:Expecting ',' delimiter: line 1 column 46 (char 45)

通过捕获异常,我们可以及时发现并处理问题,避免程序崩溃。

7. 总结

json 库作为 Python 的内置模块,是我们在进行数据存储、传递和交换时不可或缺的工具之一。其为我们提供了简单而强大的工具来处理 JSON 数据。它不仅能够轻松地实现 Python 对象与 JSON 数据之间的相互转换,还提供了丰富的参数和方法来满足各种复杂的需求。我是橙色小博,关注我,一起在人工智能领域学习进步!

http://www.xdnf.cn/news/4011.html

相关文章:

  • STC单片机与淘晶驰串口屏通讯例程之01【新建HDMI工程】
  • 计算机视觉与深度学习 | 图像匹配算法综述
  • Spring Boot 加载application.properties或application.yml配置文件的位置顺序。
  • Qwen3 性价比新王 Qwen3-30B-A3B 本地私有化部署,可灵活切换思考模式
  • 信息系统项目管理师-软考高级(软考高项)​​​​​​​​​​​2025最新(九)
  • Qml组件之AnimatedImage
  • 牛客1018逆序数-归并排序
  • 从入门到登峰-嵌入式Tracker定位算法全景之旅 Part 5 |地图匹配与轻量 SLAM:HMM/Viterbi 与简化图优化
  • 【PaaS与AI融合】MLOps平台的架构设计
  • DHCP服务器配置
  • PHP的现代复兴:从脚本语言到企业级服务端引擎的演进之路-优雅草卓伊凡
  • HTTP协议
  • 如何判断node节点是否启用cgroup?
  • 深入浅出数据库规范化的三大范式
  • 网络传输中字节序
  • 线程局部存储----TLS
  • seaborn
  • suna工具调用可视化界面实现原理分析(二)
  • 黑马点评day02(缓存)
  • 五一の自言自语 2025/5/5
  • 基于python的哈希查表搜索特定文件
  • 【C/C++】各种概念联系及辨析
  • Cadence高速系统设计流程及工具使用
  • [C++] 小游戏 决战苍穹
  • 《Java 高并发程序设计》笔记
  • NSOperation深入解析:从使用到底层原理
  • 千锋教育Ansible自动化运维实战教程从入门到精通
  • 基于windows安装MySQL8.0.40
  • 2025 年最新树莓派 Pico 连接 ESP8266 模块实现 WiFi 通信、搭建 TCP 服务器实现数据交互详细教程
  • 【多线程】九、常见的锁 读者写者问题