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

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 数据之间的相互转换,还提供了丰富的参数和方法来满足各种复杂的需求。我是橙色小博,关注我,一起在人工智能领域学习进步!

相关文章:

  • 《RESTful API版本控制的哲学思辨:稳定性与创新性的终极平衡》
  • Node.js 是什么?
  • 深入理解 TensorFlow 的模型保存与加载机制(SavedModel vs H5)
  • 蓝桥杯单片机国赛模板——基于柳离风模板
  • 列日-巴斯通-列日:与VELO Senso TT+见证精彩时刻
  • java类=null的回收
  • PostgreSQL 的 pg_ls_waldir 函数
  • Scala day6(Class,field,Single Object)
  • 【Flask】ORM模型以及数据库迁移的两种方法(flask-migrate、Alembic)
  • 学习路线(嵌入式软件)
  • 【C/C++】无锁编程——compare_exchange_strong
  • LeetCode 热题 100 46. 全排列
  • 为React组件库引入自动化测试:从零到完善的实践之路
  • 【CF】Day51——Codeforces Round 963 (Div. 2) CD
  • 【AI学习】DeepSeek-R1是如何训练的?
  • 我的世界Minecraft游戏服务器搭建教程:腾讯云Java版
  • 学习黑客Nmap 原理
  • 时间同步服务核心知识笔记:原理、配置
  • 【信息系统项目管理师-论文真题】2006下半年论文详解(包括解题思路和写作要点)
  • C# 检查某个点是否存在于圆扇区内(Check whether a point exists in circle sector or not)
  • 金沙记忆|元谋龙街渡:是起点也是终点
  • 新华社:赵心童世锦赛夺冠,中国书写斯诺克运动新历史
  • 杨德龙:取得长期投资胜利法宝,是像巴菲特一样践行价值投资
  • 9米长林肯车开进“皖南川藏线”致拥堵数小时,车主回应称将配合调查
  • 李在明涉嫌违反《公职选举法》案将于15日进行首次重审公审
  • 德国旅游胜地发生爆炸事故,11人受伤