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.mzph.cn/pingmian/79563.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网狐旗舰大联盟组件源码私测笔记:结构分层、UI重构与本地实操全流程

作为一套衍生于传统网狐架构的源码版本&#xff0c;大联盟这套源码组件可谓是在经典基础上进行了深度重塑。与老版死板的框架风格不同&#xff0c;它不仅对界面做了大刀阔斧的重构&#xff0c;还在组件层级的组织上做了优化。本文将基于一整套源码进行深度解析&#xff0c;强调…

STM32 PulseSensor心跳传感器驱动代码

STM32CubeMX中准备工作&#xff1a; 1、设置AD 通道 2、设置一个定时器中断&#xff0c;间隔时间2ms&#xff0c;我这里采用的是定时器7 3、代码优化01 PulseSensor.c文件 #include "main.h" #include "PulseSensor/PulseSensor.h"/******************…

C++项目容易犯错的点

1. 矩阵q要先定义大小&#xff0c;再赋值。不可以直接赋值。下面这种方式是错误的Eigen::MatrixXd q&#xff1b;q<<1,2&#xff1b;正确的这样的&#xff1a; Eigen::MatrixXd q(2,1); q<<1.4, 1.5; 2. 不要重复加载variables.h头文件&#xff0c;这样变量会被…

在阿里云 Ubuntu 24.04 上部署 RabbitMQ:一篇实战指南

前言 RabbitMQ 是业界常用的开源消息中间件,支持 AMQP 协议,易于部署、高可用、插件丰富。本文以阿里云 ECS 上运行的 Ubuntu 24.04 LTS 为例,手把手带你完成 RabbitMQ 从仓库配置到运行的全流程,并分享在国内环境下常见的坑与对应解决方案。 环境概况 操作系统:Ubuntu …

【论文笔记】SOTR: Segmenting Objects with Transformers

【题目】&#xff1a;SOTR: Segmenting Objects with Transformers 【引用格式】&#xff1a;Guo R, Niu D, Qu L, et al. Sotr: Segmenting objects with transformers[C]//Proceedings of the IEEE/CVF international conference on computer vision. 2021: 7157-7166. 【网…

MinIO实现https访问

Windows下实现MinIO的https访问. 首先需要自己解决证书问题, 这里可以是个人证书 也可以是花钱买的证书. 现在使用个人开发者证书举例子。 将证书数据解压到你知道的目录之下 然后直接使用命令启动MinIO start minio.exe server --certs-dir D:\xxxxx\tools\certs …

基于 jQuery 实现灵活可配置的输入框验证功能

在 Web 表单开发中&#xff0c;输入框验证是保障数据准确性和安全性的关键环节。无论是用户注册、信息提交还是数据录入场景&#xff0c;都需要对用户输入内容进行合法性检查。本文将介绍如何使用 HTML、CSS 和 jQuery 构建一个可灵活配置的输入框验证系统&#xff0c;轻松应对…

Kotlin 04Flow stateIn 和 shareIn的区别

一 Kotlin Flow 中的 stateIn 和 shareIn 一、简单比喻理解 想象一个水龙头&#xff08;数据源&#xff09;和几个水杯&#xff08;数据接收者&#xff09;&#xff1a; 普通 Flow&#xff08;冷流&#xff09;&#xff1a;每个水杯来接水时&#xff0c;都要重新打开水龙头从…

WebRTC 服务器之SRS服务器概述和环境搭建

1.概述 SRS&#xff08;Simple Realtime Server&#xff09;是一款高性能、跨平台的流媒体服务器&#xff0c;支持多种协议&#xff0c;包括 RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH 和 GB28181。本文介绍了 SRS&#xff0c;包括其用途、关键功能、架构和支持协议。SRS 旨…

Dify - Embedding Rerank

注意&#xff1a;v100显卡会出现不适配&#xff0c;不推荐使用 1. 安装 Docker ubuntu 22.04 docker 安装&使用_ubuntu22.04 安装docker-CSDN博客 2. 安装vllm pip install -U xformers torch torchvision torchaudio triton --index-url https://download.pytorch.org/w…

LeetCode:链表的中间结点

1、题目描述 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[3,4,5] 解释&#xff1a;链表只有一个中间结点&#xff…

LabVIEW温控系统热敏电阻滞后问题

在 LabVIEW 构建的温控系统中&#xff0c;热敏电阻因热时间常数大&#xff08;2 秒左右&#xff09;产生的滞后效应&#xff0c;致使控温出现超调与波动。在不更换传感器的前提下&#xff0c;可从算法优化、硬件调整和系统设计等维度着手解决。 ​ 一、算法优化​ 1. 改进 PI…

技术犯规计入个人犯规吗·棒球1号位

在棒球运动中&#xff0c;虽然没有“技术犯规”这一特定术语&#xff0c;但存在多种违规行为或违反规则的情况&#xff0c;通常会导致判罚或处罚。以下是常见的违规行为及相关规则&#xff1a; 1. 投手违规&#xff08;Balk&#xff09; 定义&#xff1a;投手在垒上有跑垒员时…

Python核心技巧 类与实例:面向对象编程的基石

、核心概念图解 &#x1f3af; 类 vs 实例 类&#xff1a;对象的蓝图&#xff08;如"汽车设计图"&#xff09; 实例&#xff1a;类的具体实现&#xff08;如"你的特斯拉Model 3"&#xff09; class MyClass: # 类声明 count 0 # 类…

协程补充---viewModelScope 相关知识点

viewModelScope.launch 默认在 Dispatchers.Default 线程池执行Dispatchers.Default 是一个后台线程池&#xff0c;专门用于 CPU 密集型任务如果需要在主线程执行&#xff0c;必须显式指定 Dispatchers.Main remember 是 Compose 的状态管理函数(queueMenus) 是依赖项&#xff…

linux stm32mp157 GIC-V2 中断处理过程分析

/* ** 中断触发时&#xff0c;调用的 handle_arch_irq 入口地址。 ** 因为此时&#xff0c;挂接的就是 gic_handle_irq 函数&#xff01;gic_handle_irq 是个全局函数指针&#xff0c; ** static void __exception_irq_entry gic_handle_irq(struct pt_regs *regs) ** 它是Lin…

动态指令参数:根据组件状态调整指令行为

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

直方图比较

目录 1、直方图比较的概念 2、直方图比较的主要原因 3、典型应用场景 4、基础直方图比较 5、多通道直方图比较 6、实时直方图检测 1、直方图比较的概念 直方图比较是通过数学方法计算两个直方图之间的相似度或差异度的技术。在计算机视觉中&#xff0c;直方图是对图像特征…

Windows11 VS code 安装 Cline 调用 Github MCP 配置过程坑点汇总

背景 为了调研 MCP 在 windows 上如何使用本地的命令执行一些操作而实现自动化的过程&#xff0c;在 B 站视频的指导下&#xff0c;进行相应填坑过程&#xff0c;最终运行起来&#xff0c;并实现 github 自动化编程并提交代码的过程。 B 站 Cline 视频演示 Cline Cline 是一…

kdump详解

kdump 是 Linux 系统中的一种内核崩溃转储机制&#xff0c;用于在系统崩溃时将内存中的数据保存到磁盘上&#xff0c;以便后续分析系统崩溃的原因。以下是对 kdump 的详细介绍&#xff1a; 1、工作原理 kdump 利用了 Linux 系统中的双启动机制。当系统启动时&#xff0c;它会…