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.jsonencoder
和json.jsondecoder
:这两个类分别用于自定义 json 编码器和解码器,可以处理一些特殊的类型转换问题。json.jsondecodeerror
:当解析 json 数据出错时,会抛出这个异常,我们可以使用它来进行错误处理。
5. json 库的高级用法
5.1 自定义对象的序列化与反序列化在
实际开发中,我们可能会遇到需要序列化自定义对象的情况。默认情况下,json 库无法直接序列化自定义对象,但我们可以自定义一个编码器来实现这个功能。
import json class person: def __init__(self, name, age): self.name = name self.age = age class 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 json json_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 数据之间的相互转换,还提供了丰富的参数和方法来满足各种复杂的需求。
到此这篇关于python中json库详细介绍与代码示例的文章就介绍到这了,更多相关python中json库详解内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论