使用Python读取和解析JSON数据教程

如题所述

JSON格式是网站和API使用的通用标准格式,现在主流的一些数据库(如PostgreSQL)都支持JSON格式。在本文中,我们将介绍如何使用Python处理JSON数据。首先,让我们先来看看JSON的定义。

什么是JSON? JSON或JavaScript Object Notation,是一种使用文本存储数据对象的格式。换句话说,它是一种数据结构,将对象用文本形式表示出来。尽管它来源自JavaScript,但它已成为传输对象的实际标准。

大多数流行的编程语言都支持JSON格式,包括Python。JSON格式的文件经常用于API传输数据对象。以下是JSON字符串的示例:

在这个例子中,JSON数据看起来像一个Python字典。像字典一样,JSON以键值对的形式传递数据。然而,JSON数据也可以是字符串、数字、布尔值或列表。

在JSON流行之前,XML一直是以文本格式表示数据对象的常见选择。以下是XML格式的相同信息的示例:

很明显,JSON代码量更少。这是JSON如此流行的主要原因之一。如果您想了解有关JSON标准的更多信息,请访问 JSON官方网站。

Python中的JSON Python原生支持JSON数据。Pythonjson模块是标准库的一部分。该json模块可以将JSON数据从JSON格式转换到等效的Python对象,例如dictionary和list。JSON模块还可以将Python对象转换为JSON格式。

Python的json模块提供编写自定义编码器和解码器功能,无需单独安装。您可以在 此链接里找到Pythonjson模块的官方文档。

接下来,我们将研究下这个模块。我们将把JSON转换为dictionary和list。我们还将尝试处理自定义类。

将JSON字符串转换为Python对象 JSON数据经常存储在字符串中。这是使用API时的常见场景。JSON数据在解析之前一般存储在字符串变量中。因此,与JSON相关的最常见任务是将JSON字符串解析为Python字典。JSON模块可以轻松处理此任务。

第一步是导入Python的json模块。该模块包含两个重要的功能-loads和load。

请注意,第一种方法看起来像复数形式,但事实并非如此。字母“S”代表“字符串”。

loads是将字符串解析为JSON数据。请注意,它读作“load-s”。这里的“s”代表“字符串”。Load的使用场景是当数据以字节为单位时。这部分后面会详细介绍。

让我们从一个简单的例子开始。JSON数据实例如下:

JSON数据可以在解析之前存储为JSON字符串。我们不仅可以使用Python的三引号来存储多行字符串,也可以通过删除换行符来提高可读性。

此代码段的输出将确认这确实是一个JSON字符串:

我们可以调用该json.loads()并将此字符串作为参数。

此代码段的输出将确认作为字符串的JSON数据现在已经是Python字典。

这本字典可以像往常一样正常访问:

需要注意的是,json.loads()方法并不总是返回字典。返回的数据类型将取决于输入的字符串。例如,下面这个JSON字符串将返回一个列表,而不是一个字典。

同样,如果JSON字符串包含true,它将被转换为Python等效的布尔值,即True。

下表显示了转换后的JSON对象和Python数据类型。

接下来我们将继续下一个主题,将JSON对象解析为Python对象。

将JSON文件转换为Python对象 读取JSON文件,并将JSON数据解析为Python数据,与我们解析存储在字符串中JSON数据的方式非常相似。除了JSON,我们还需要Python的原生函数open()。

一般loads用于读取JSON字符串,而load()用于读取文件中的JSON数据。

load()方法接收一个文件对象并返回解析为Python对象的JSON数据。

要从文件路径中获取文件对象,可以使用Python的函数open()。

将以下JSON数据另存为新文件并将其命名为united_states.json:

在新文件中输入此Python脚本:

运行此Python文件会输出以下内容:

在此示例中,该open函数返回一个文件句柄,该句柄会提供给load。

变量data包含JSON,作为Python字典。这意味着可以按如下方式检查字典键:

使用此信息,name可以输出如下:

在前两节中,我们研究了如何将JSON转换为Python对象。现在,我们来看看如何将Python对象转换为JSON对象。

将Python对象转换为JSON字符串 将Python对象转换为JSON对象也称为序列化或JSON编码。可以使用函数dumps()来实现。它被读作dump-s,字母S代表字符串。

以下是一个简单的例子。将此代码作为Python脚本保存在新文件中:

使用Python运行此文件时,将输出以下结果:

Python对象现在就是一个JSON对象了。这个简单的例子展示了将Python对象解析为JSON对象的过程,整个过程并不复杂。而此处的Python对象是一个字典。这就是它被转换为JSON对象类型的原因。同样,列表也可以转换为JSON。这是对应的Python脚本及其输出:

它不仅限于字典和列表。string,int,float,bool甚至None值都可以转换为JSON。

有关详细信息,请参阅下面的转换表。可以看到,只有字典被转换为json对象类型。有关官方文档,请参阅 此链接。

将Python对象写入JSON文件 用于编写JSON文件的方法是dump().这种方法与dumps()方法非常相似。唯一的区别是dumps()返回一个字符串,dump()写入一个文件。

下面是一个简单的演示,将以编辑模式打开文件并将数据写成JSON格式。保存此Python脚本并运行它。

使用Python执行此代码时,countries_exported.json会创建(或覆盖)文件,内容为以上JSON文件。

但是,您会发现整个JSON都在一行中。为了使它更具可读性,我们可以再传递一个参数给dump()函数,如下所示:

这一次,当您运行代码时,格式就正常了,同时还会缩进4个空格:

注意,indent参数也可用于JSONdumps()方法。JSONdump()和JSONdumps()唯一区别是dump()需要一个文件对象。

将自定义Python对象转换为JSON对象 让我们检查dump()方法的签名:

重点关注参数cls。 如果在调用dump方法时没有Class,则dump()和dumps()方法都会默认为JSONEncoder该类。此类支持标准的Python类型有:dict,list,tuple,str,int,float,True,False,和None。

如果我们尝试json.loads()在任何其他类型上调用该方法,则此方法将引发TypeError的报错信息:Object of typeis not JSON serializable。

将以下代码另存为Python脚本并运行:

要将对象转换为JSON,我们需要编写一个扩展JSONEncoder的新类。在这个类中,需要实现default()。此方法将具有返回JSON的自定义代码。

以下是Country类的示例编码器。这个类将帮助将Python对象转换为JSON对象:

这段代码在确认提供的对象是Country类的实例后会返回一个字典,或者调用父级来处理其余的情况。

这个类可以提供给json.dump()和json.dumps()方法。

从JSON对象创建Python类对象 到目前为止,我们已经讨论了如何使用json.load()和json.loads()方法创建字典、列表等。如果我们想读取JSON对象并创建自定义类对象又该怎么办?

在本节中,我们将创建一个自定义JSON解码器,帮助我们创建自定义对象。这个自定义解码器将允许我们使用json.load()和json.loads()方法,并返回一个自定义类对象。

我们将使用上一节中使用的Country类。使用自定义编码器,我们能够编写如下代码:

如果我们尝试使用json.load()方法解析这个JSON文件,我们将得到一个字典:

如果要获取Country类的实例而不是字典,我们需要创建一个自定义解码器。这个解码器类将扩展JSONDecoder。在这个类中,我们将编写object_hook.这样可以从字典中读取值来创建Country类的对象。

除了编写这个之外,我们还需要调用__init__基类并将参数object_hook的值设置为这个方法的名称。为简单起见,我们可以使用相同的名称。

注意,我们会使用.get()方法来读取字典键。这将确保在字典中缺少键时不会引发错误。

最后,我们可以调用json.load()方法并将cls参数设置为CountryDecoder类。

搞定!我们现在就有一个直接从JSON创建的自定义对象了。

Loading与dumping对比 Python的JSON模块有四个主要功能:read(),reads(),load(),和loads()。这些功能常常会让人混淆。最重要的地方是字母“s”代表String。另外,在函数loads()和dumps()中的字母“s”需要分开读,即loads读load-s,dumps()读dump-s。

这是一个快速表格,可帮助您记住这些功能:

结论 在本教程中,我们学习了使用Python读取和写入JSON数据。尤其是在处理网站时,了解如何处理JSON数据至关重要。JSON用于很多地方传输和存储数据,包括API、网络爬虫和现代数据库(如PostgreSQL)。

如果您正在从事涉及动态网站的网络抓取项目,那么了解JSON至关重要。可以阅读我们的 文章,了解JSON实例在无限滚动页面中的应用。
温馨提示:内容为网友见解,仅供参考
无其他回答

python怎么读取json文件内容
打开文件并读取内容 要使用Python读取JSON文件,首先需要使用内置函数`open`打开文件。然后,使用`read`方法读取文件的内容。这样可以获取包含JSON数据的字符串。例如:python with open as f:json_data = f.read 这里,'filename.json'是你要读取的JSON文件的名称,'r'表示以读取模式打开文件。解析JSON...

python怎么读取json文件内容
首先,需要导入Python内置的`json`模块,以便使用其中的函数来解析JSON数据。然后,使用`open`函数以只读模式打开JSON文件,并将文件对象赋值给变量`f`。这里的文件路径'data.json'应替换为实际的JSON文件路径。接着,使用`json.load`函数读取文件对象`f`中的JSON数据,并将其转换为Python对象。这个转换过...

使用Python读取和解析JSON数据教程
同样,如果JSON字符串包含true,它将被转换为Python等效的布尔值,即True。下表显示了转换后的JSON对象和Python数据类型。接下来我们将继续下一个主题,将JSON对象解析为Python对象。将JSON文件转换为Python对象 读取JSON文件,并将JSON数据解析为Python数据,与我们解析存储在字符串中JSON数据的方式非常相似。除了JSON,我们还...

python读取json
python如何读取json?让我们一起来了解下。1、打开电脑,找到Python,没有下载的可以去官网下载。2、打开Python点击并进入。3、输入load命令,即可读取JSON。今天的分享就是这些,希望能帮助大家。

Python 中读取和写入 JSON
在Python中,使用json模块的load()或loads()函数读取JSON数据。load()从文件读取,loads()从字符串读取。读取JSON数据分为两种情况:从文件读取和从字符串读取。假设有一个名为data.json的JSON文件,内容如下:使用json.load()函数读取文件内容:运行后,输出解析结果。json.load()将文件内容解析为Python...

python怎么读取json文件内容
- 使用`json.load()`从文件中加载并转换数据:with open("..\/config\/record.json", 'r') as load_f: load_dict = json.load(load_f)load_dict['smallberg'] = [8200, {'1': [['Python', 81], ['shirt', 300]]}]print(load_dict)记得替换文件路径和更新字典内容,以符合实际...

如何使用python爬虫批量爬取网页自带的json文件数据?
处理获取到的json数据,可以使用json库将响应内容解析为Python字典或列表,便于后续操作与分析。对数据进行清洗、转换或整合,以满足特定需求。确保代码具备异常处理机制,对数据清洗过程中的错误进行捕捉和记录。使用数据库或文件存储爬取结果,便于后续分析与使用。可以使用CSV、JSON或数据库存储方式,根据数据...

在python中json文件应该如何读取?
python import json import csv 读取 JSON 文件并加载内容 with open('single.json', 'r') as file:data = json.load(file)创建 CSV 文件的列名集合 fieldnames = set()遍历 JSON 数据中的每个对象 for item in data:解析 JSON 对象文本为字典 json_obj = json.loads(item['text'])获取字典...

在Python 中读取和写入 JSON
要读取 JSON,Python 有 load() 函数,它能从 JSON 文件中加载数据到字典。使用 data = json.load(file) 从文件读取,或者 data = json.loads(json_string) 对包含 JSON 对象的字符串进行解析。对于格式化输出,Python 的 JSON 库默认提供了有序且缩进的输出,这使得 JSON 更易于阅读和调试。Pytho...

Python解析HTTP响应中的JSON数据
首先,为了获取JSON数据,你需要利用requests库进行HTTP请求。requests库以其直观易用的API支持各种请求类型。python import requests response = requests.get('http:\/\/example.com\/api')在开始解析之前,务必检查HTTP响应的状态码,确认请求是否成功,通常成功的状态码为200。python if response.status_code...

相似回答
大家正在搜