Python 中的 JSON 操作和转换技术

2023-10-15

在本教程中,您将学习各种 JSON 处理技术,例如加载 JSON 对象、写入、排序 JSON 或解析 JSON 等。

JSON 代表JavaScript Object N代表结构化数据的otation。 JSON 数据用于交换信息。

在Python中,我们可以通过导入名为json的内置Python模块来使用JSON。 json 模块对 JSON 数据进行编码和解码。

 

 

为什么使用 JSON?

JSON 包含人类和机器可以读取的数据。在Python中使用JSON的主要目的是存储和检索列表、元组和词典。

大多数API使用JSON格式来传递信息。同样,如果您有大量数据,可以将数据编码为 JSON 格式并将其存储在数据库中。

加载该包的语法如下:

Syntax:


import json
  

 

读取 JSON 文件

要从 JSON 文件读取数据,我们可以使用 load() 方法。

在Python中读取JSON数据意味着将JSON对象转换为Python对象。 JSON对象到Python对象的转换称为反序列化。例如,JSON 数组相当于 Python 中的列表。

load() 的语法如下:

Syntax:


data = json.load(object)
  
  • “object”是在执行语句后将加载的 JSON 对象,并将作为 Python 对象存储在变量“data”中。

考虑以下 JSON 对象:

Code:


{
	"date": "2021-07-17",
	"firstname": "Hamza",
	"lastname": "Sher",
	"city": "Kyoto",
	"array": [
	    "Carmela",
		"Ashlee",
		"Alisha"
	],
	"array of objects": [
		{
			"index": 0,
			"index start at 5": 5
		},
		{
			"index": 1,
			"index start at 5": 6
		},
		{
			"index": 2,
			"index start at 5": 7
		}
	]
}
  

以下代码打印 JSON 对象内键“array”的值:

Code:


import json
jsonFile = open('jsonData.json')
data = json.load(jsonFile)
print(data)
jsonFile.close()
  

Output:

如果我们有一个存储 JSON 对象的字符串,我们可以使用loads() 方法来读取该字符串。

Syntax:


data = json.loads(jsonString)  

以下代码打印 JSON 字符串:

Code:


import json
jsonData = '{"Name": "Hamza", "ID":"12345"}'
data = json.loads(jsonData)
print(data)
  

Output:

 

获取 JSON 值

JSON 对象以键值对的形式构建,这使得从对象获取特定值变得非常简单。我们可以使用字典索引来访问与键关联的值。

Syntax:


data['firstname']  

下面的代码演示了我们如何使用它来获得我们想要的结果。

Code:


import json
jsonFile = open('jsonData.json')
data = json.load(jsonFile)
print(data['firstname'])
jsonFile.close()
  

Output:

 

更新和删除 JSON 对象

在 Python 中更新 JSON 对象就像使用我们导入的 json 包中的内置 update() 函数一样简单。

update 方法用于将新的键值对添加到我们在代码中声明的 JSON 字符串中。我们可以添加单个键值对或添加将附加到之前的 JSON 字符串的整个字典。

Syntax:


jsonObject.update(KeyValuePair)  

以下代码实现 update() 方法。

Code:


import json
jsonData = '{"ID":"123", "Name": "Hamza"}'
data = json.loads(jsonData)
newData = {"DOB": "22-10-2001"}
data.update(newData)
print(data)
  

Output:

字典“newData”已添加到“jsonData”对象中。这就是 update() 方法执行其功能的方式。

转到删除功能。 json包中没有内置函数来删除键值对。因此,我们必须编写更多的代码来执行此功能。

以下是我们如何在 JSON 对象上实现删除。请记住,我们使用的是与本教程开头提到的相同的 JSON 文件。

Code:


import json
file = open('jsonData.json', 'r')
data = json.load(file)
file.close()
if 'firstname' in data:
    del data['firstname']
print(data)
  

Output:

让我们看看这里到底发生了什么。当我们检查字典中是否存在“firstname”时,Python 会检查字典,如果键存在,我们可以使用 del 关键字删除该键值对。

 

按键更新 JSON 值

以下是通过键更新值的方法:


json_object = {
    "name": "John",
    "age": 30,
    "city": "New York"
}
json_object["age"] = 35
print(json_object)
  

Output:


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

与键关联的值"age"更新自30 to 35.

 

重命名 JSON 键

以下是在 Python 中执行此操作的常见方法:


json_object = {
    "firstname": "John",
    "age": 30
}
json_object["name"] = json_object.pop("firstname")
print(json_object)
  

Output:


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

该代码使用pop移除钥匙的方法"firstname"并同时检索其值。然后,它将该值分配给一个新键"name".

结果是关键"firstname"被有效地重命名为"name".

 

删除重复项

您可以使用 set() 方法从 JSON 中删除重复项。

Code:


import json
json_array = [
    {"name": "John", "age": 30},
    {"name": "Jane", "age": 25},
    {"name": "John", "age": 30}
]

# Convert JSON objects to strings to make them hashable
json_strings = [json.dumps(item, sort_keys=True) for item in json_array]

# Use set to remove duplicates
unique_json_strings = set(json_strings)

# Convert back to JSON objects
unique_json_array = [json.loads(item) for item in unique_json_strings]
print(unique_json_array)
  

Output:


[
    {"name": "Jane", "age": 25},
    {"name": "John", "age": 30}
]
  

首先,我们使用以下命令将数组中的每个 JSON 对象转换为字符串json.dumps,确保对键进行排序以确保顺序一致。

然后,我们使用集合来删除重复项,因为集合不能包含重复元素。

最后,我们使用以下方法将唯一的 JSON 字符串转换回 JSON 对象:json.loads.

 

对 JSON 进行排序

我们可以根据键按字母顺序对 JSON 对象进行排序。为此,我们使用 json.dumps() 方法以及该方法的一些参数。使用该方法的语法如下:

Syntax:


json.dumps(data, sort_keys=True)  

这里我们将两个参数传递给函数 json.dumps()。第一个“数据”包含我们存储在 Python 变量中的 JSON 对象。

第二个是 sort_keys 参数,当设置为 True 时,按字母顺序对数据进行排序并以字符串形式返回 JSON 对象。以下代码使用此功能:

Code:


import json
file = open('jsonData.json', 'r')
data = json.load(file)
file.close()
print(json.dumps(data, sort_keys=True))
  

Output:

查看代码,很容易理解发生了什么。首先,我们加载数据并将其存储到变量“data”中,然后关闭文件。

然后,在单个语句中,我们借助函数 json.dumps() 和 sort_keys=True 参数打印排序后的数据。

 

创建 JSON 对象

要创建 JSON 对象,我们需要一个包含数据的 Python 字典。我们将使用与之前使用的方法相同的方法,即 json.dump() 和 json.loads()。下面的代码实现了这个功能:

Code:


import json
data = {"Name":"John Doe", "ID":"123"}
json_dump = json.dumps(data)
json_data = json.loads(json_dump)
print(json_data)
  

Output:

这里我们将一些数据定义为Python字典。然后我们使用 json.dumps() 方法并将 Python 字典作为参数传递。

这会将我们的 Python 字典转换为可以传递给 json.loads() 方法的字符串。然后 json.loads() 方法将此字符串转换为 JSON 对象,我们可以在打印时看到输出。

 

将 JSON 写入文件

要将 JSON 对象写入 JSON 文件,我们可以使用 json.dump() 方法。此方法获取我们将写入文件的数据以及我们将写入数据的文件。下面的代码解释了我们如何做到这一点!

Code:


import json
file = open('jsonData.json', 'r')
data = json.load(file)
file.close()
newData = {"DOB": "22-10-2001"}
data.update(newData)
file = open('jsonData.json', 'w')
json.dump(data, file)
file.close()
print(data)
  

Output:

首先,我们以读取模式打开文件并将文件内容存储到变量“data”中。然后我们更新“数据”并将新的键值对添加到该变量中。

之后,我们再次以写入模式打开文件。我们使用 json.dump() 函数并将其作为参数传递给数据和文件,然后关闭文件。

输出显示数据已更新,我们可以通过查看 json 文件来确认这一点。

 

漂亮的打印 JSON

您可以使用indent参数以使输出 JSON 更好地打印。

Code:


import json
data = {
  "name": "John",
  "age": 30,
  "city": "New York",
  "hasChildren": False,
  "titles": ["engineer", "programmer"]
}
pretty_json = json.dumps(data, indent=4)
print(pretty_json)
  

Output:


{
    "name": "John",
    "age": 30,
    "city": "New York",
    "hasChildren": false,
    "titles": [
        "engineer",
        "programmer"
    ]
}
  

该代码使用json.dumps函数与indent参数设置为4。

这会导致输出 JSON 字符串的格式为每个级别缩进四个空格,使其更具可读性。

 

使用分隔符参数

您可以使用separators参数来控制 JSON 输出中项目之间的分隔符。

这在各种格式化情况下都很有帮助。

Code:


import json
data = {
    "name": "John",
    "age": 30,
    "city": "New York"
}
custom_separators_json = json.dumps(data, separators=(',', ':'))
print(custom_separators_json)
  

Output:


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

在这里,separators参数设置为元组(',', ':'),它指定 JSON 字符串中的项目和键值对之间使用的分隔符。

通过使用此自定义,您可以减少 JSON 输出中的空白量,使其更加紧凑。

 

解析 JSON

我们可以简单地使用 json.loads() 方法来解析 Python 中的 JSON 字符串。此方法将 JSON 字符串转换为 Python 字典,可以根据字典中存在的键进行索引。

Syntax:


json.loads(jsonString)  

这里“jsonString”是作为参数传递到方法中的 JSON 字符串。该方法将解析 JSON 字符串并返回一个可以进一步存储在变量中的 Python 字典。

我们还可以对该变量执行所有字典方法。下面的代码实现了这个功能。

Code:


import json
data = '{"Name":"John Doe", "ID":"123"}'
json_data = json.loads(data)
print(json_data['Name'])
  

Output:

在此代码中,我们将 JSON 字符串“data”作为参数传递给方法 json.loads(),该方法返回存储在变量“json_data”中的字典。打印函数验证该方法是否成功运行。

 

验证 JSON

JSON 验证是检查 JSON 对象是否符合预定义模式或结构的过程。

您可以使用诸如jsonschema验证 JSON 数据。这是一个例子:

安装 jsonschema 库:


pip install jsonschema
  

验证 JSON 对象:


from jsonschema import validate
schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string"},
        "age": {"type": "integer"}
    },
    "required": ["name", "age"]
}
data = {"name": "John", "age": 30}
validate(instance=data, schema=schema)
  

Output:
没有抛出异常;数据符合架构。

该代码片段定义了一个架构,该架构需要具有字符串名称和整数年龄的对象。

The validate函数从jsonschema然后使用库来检查是否data对象满足此模式。

自从data对象符合定义的模式,代码运行没有任何错误。

 

合并 JSON 对象

在 Python 中,可以使用标准字典合并技术来合并 JSON 对象,因为 Python 中的 JSON 对象表示为字典。以下是组合两个 JSON 对象的方法:


json_object1 = {
    "name": "John",
    "age": 30
}
json_object2 = {
    "city": "New York",
    "hasChildren": False
}
merged_json_object = {**json_object1, **json_object2}
print(merged_json_object)
  

Output:


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

这里有两个 JSON 对象,json_object1 and json_object2,使用扩展语法合并{**json_object1, **json_object2}.

所结果的merged_json_object包含两个原始对象的所有键值对。

 

对象到 JSON

可以使用我们之前讨论过的相同 json.dumps() 方法将 Python 对象转换为 JSON。让我们看看这是如何完成的。

Code:


import json
class Car:
    def __init__(self, model, make, engine_capacity):
        self.model = model
        self.make = make
        self.engine_capacity = engine_capacity
car_1 = Car('2001', 'Honda', '1.8L')
json_data = json.dumps(car_1.__dict__)
print(json_data)
  

Output:

在这段代码中,我们首先创建一个 Car 类,然后创建该类的一个对象。

然后我们将使用 json.dumps() 函数并将汽车对象作为“car.__dict__”传递。 ‘__dict__’将所有成员变量转换为字典并将其传递给 json.dumps() 方法。

从输出中我们可以看到该对象已转换为 JSON。

 

JSON 到对象

要将 JSON 字符串转换为 Python 对象,我们需要一个类,我们必须创建该类的对象并使用 json.loads() 方法,如下所示:

Code:


import json
class Car:
    def __init__(self, model, make, engine_capacity):
        self.model = model
        self.make = make
        self.engine_capacity = engine_capacity
json_data = '{"model": "2001", "make": "Honda", "engine_capacity": "1.8L"}'
data = json.loads(json_data)
car_1 = Car(**data)
print(car_1.engine_capacity, car_1.make, car_1.model)
  

Output:

这里我们将数据加载到变量“data”中,然后将该字典作为关键字参数传递给汽车类。我们可以在输出中看到该对象已创建。

 

字节到 JSON

将字节字符串或字典转换为 JSON 非常简单。我们只需要使用内置的 json.dumps() 函数即可。

Syntax:


json.dumps(bytesString)  

以下代码说明了此功能。

Code:


import json
byte_str = b'{"Name":"Hamza", "ID":"123"}'
dec_str = byte_str.decode('utf-8')
data = json.dumps(dec_str)
print(data)
  

Output:

这里我们首先定义了一个字节串,然后将其解码为‘utf-8’字符集。之后,我们简单地使用 json.dumps() 将字符串转换为 JSON 字符串。

 

将 HTML 转换为 JSON

要将 HTML 转换为 JSON 对象,我们必须使用另一个名为 html-to-json 的 Python 包。该包的作用基本上是获取 HTML 文件并将其转换为 JSON 对象。

我们可以在命令提示符或终端中使用以下命令来安装此软件包:

Syntax:


pip install html-to-json  

首先,我们需要将其导入到我们的程序中。

Syntax:


import html_to_json  

导入后,我们现在可以编写代码将 HTML 文件转换为 JSON 对象。这是我们将使用的示例 HTML 文件:

Code:


<!doctype html>
<html lang="en-US">
    <head>
        <title>Sample Html Doc</title>
    </head>
    <body>
        <div>
            <h1>First Heading</h2>
            <p>This is a sample HTML Doc</p>
        </div>
    </body>
</html>
  

现在,我们将继续编写代码以将此 HTML 转换为 JSON。

Code:


import json
import html_to_json
file = open("sample.html", "r")
html = file.read()
file.close()
output_json = html_to_json.convert(html)
print(output_json)
  

Output:

在此代码中,我们使用 html-to-json 包将 HTML 转换为 json。为此,我们使用 html_to_json.convert() 方法并传递包含所需 HTML 的字符串。

 

JSON 到 SQL

将 JSON 对象转换为 SQL 表需要一些额外的步骤,而不仅仅是使用单一方法。这里我们使用了两个以前没有使用过的新包。

首先是 Pandas 包,它是一个数据分析工具。我们将使用它将 JSON 对象转换为 Pandas DataFrame。

第二个包是 sqlalchemy。该软件包是一个数据库工具包和一个对象关系映射器(ORM)。以下是我们导入这些包的方法:

Syntax:


import pandas as pd
from sqlalchemy import create_engine
  

这里create_engine是一个帮助我们连接到的方法SQLite数据库。以下代码说明了此功能:

Code:


import json
import pandas as pd
from sqlalchemy import create_engine
with open("jsonsample.json") as f:
    data = json.load(f)
df = pd.DataFrame(data)
engine = create_engine("sqlite:///my_data.db")
df.to_sql("Sample_Data", con=engine)
  

当我们运行此代码时,会创建一个名为“my_data.db”的数据库。之后,数据将被插入到数据库中,表名为“Sample_Data”。

我们可以通过在命令提示符或终端中运行以下命令来确认这一点:

Code:


$ sqlite my_data.db
sqlite> .schema
  

根据 JSON 对象,您可以看到表已创建并且数据已插入。

 

JSON load() VS load()

两者之间的区别在于,使用 load() 方法,我们传递 JSON 文件作为参数,然后我们可以将其存储在变量中。

虽然loads()方法我们传递一个 JSON 字符串它被定义为 Python 变量并将该字符串序列化为 JSON 对象。以下代码示例显示了此功能。

代码:(加载())


import json
jsonFile = open('jsonData.json')
data = json.load(jsonFile)
print(data)
jsonFile.close()
  

Output:

代码:(负载())


import json
jsonData = '{"Name": "Hamza", "ID":"12345"}'
data = json.loads(jsonData)
print(data)
  

Output:

 

JSON 转储() VS 加载()

json.loads() 和 json.dumps() 方法是相反的。 json.loads() 方法接受一个字符串并返回一个 JSON 对象可以进一步使用。

而 json.dumps() 方法接受一个 JSON 对象并返回一个字符串包含所有数据。

以下代码示例说明了此功能:

Code:


import json
json_data = '{"Name":"Hamza", "ID":"123"}'
data = json.loads(json_data)
print("loads method: ", data)
dumps_data = json.dumps(data)
print("dumps method: ", dumps_data)
  

Output:

我希望你喜欢这个教程。继续回来。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 中的 JSON 操作和转换技术 的相关文章

随机推荐

  • 在 Python 中删除字符串中标点符号的 5 种方法

    Python 提供了多种删除标点符号的方法 这里的目标是将字符串中的每个标点字符替换为空字符串 让我们为所有示例考虑以下原始字符串 original string Hello World Let s test some punctuatio
  • PyQt5 教程 – Python GUI 编程示例

    PyQt5 是用 Python 构建 GUI 应用程序时最常用的模块之一 这是因为它的简单性 正如您将看到的那样 鼓励开发人员使用 PyQt5 的另一个重要功能是 PyQt5 设计器 它使得在短时间内开发复杂的 GUI 应用程序变得非常容易
  • Python GUI 示例(Tkinter 教程)

    在本教程中 我们将通过使用 Tkinter 包编写一些 Python GUI 示例来学习如何开发图形用户界面 Tkinter 包作为标准包随 Python 一起提供 因此我们不需要安装任何东西即可使用它 Tkinter 包是一个非常强大的包
  • Python 中的凯撒密码(文本加密教程)

    密码学涉及将一条信息 以纯文本形式 加密或编码为一种看起来乱码且在普通语言中毫无意义的形式 此编码消息 也称为密文然后 目标接收者可以使用传达给最终用户的解码技术 通常与私钥一起 将其解码回纯文本 凯撒密码是我们将在本教程中重点介绍的最古老
  • 安装和使用非 Composer Laravel 包

    如果你想在 Laravel 中使用包 你只需在 Composer json 文件中添加一行即可完成工作 这是因为该包在 packagist org 中可用 如果您要使用的包是非 Composer Laravel 包怎么办 可能在 git 存
  • 文本处理中 Awk 命令的 30 个示例

    在上一篇文章中 我们谈到了sed命令我们看到了许多在文本处理中使用它的例子 我们看到了它在这方面的优点 但它有一些局限性 有时您需要一些强大的功能 让您能够更好地控制数据处理 这是哪里awk 命令进来 awk 命令或具体的 GNU awk
  • 安装、保护、访问和配置 Linux 邮件服务器 (Postfix)

    如果您想发送或接收电子邮件 您应该有一个邮件服务器 在这篇文章中 我们将讨论 Linux 邮件服务器以及 SMTP 简单邮件传输协议 以及其他邮件相关协议 例如邮局协议 POP 和互联网消息访问协议 IMAP 的工作原理以及它们之间的关系他
  • 了解和使用 Linux Subshel​​l(实用指南)

    子shell是由shell启动的子进程 shell本质上是一个命令行解释器 它共享父 shell 的属性 但在单独的进程空间中运行 子 shell 为执行命令和运行脚本提供了隔离性和灵活性 子 shell 通常用于任务自动化 并行执行和模块
  • 加速您的 Python 代码:Numba 实用指南

    Numba 是一个开源 JIT 编译器 可以翻译以下代码的子集Python and NumPy代码转换为快速机器代码 它通过使用行业标准的 LLVM 编译器库并优化执行速度来加速数值计算 在本教程中 我们将探索如何使用 Numba 使 Py
  • Linux 正则表达式教程(Sed 和 AWK)示例

    为了成功地与Linux sed编辑和awk 命令在 shell 脚本中 您必须了解正则表达式或简称正则表达式 由于正则表达式有很多引擎 我们将使用 shell 正则表达式并了解 bash 在使用正则表达式方面的强大功能 首先 我们需要了解什
  • 10 多个在 Linux 中终止进程的示例

    在本教程中 我们将通过多个示例讨论如何终止 Linux 中的进程 在大多数情况下 就像输入 kill 命令然后输入进程 ID 通常缩写为 PID 一样简单 正如你所看到的 我们杀死了一个ID为1813的进程 如果您是 Windows 用户
  • 如何安装和配置 Squid Linux 代理服务器

    Linux代理服务器或代理服务器通常是保存访问过的网页以供以后请求的服务器 因此如果您尝试访问同一个网页或其他任何人 您将从代理服务器获取页面 这非常有用 它使网上冲浪速度更快并减少流量 这意味着成本更低 缓存服务器可以将外部流量减少至 4
  • 使用 Sed 命令进行文本替换的实际示例

    在本教程中 您将深入研究如何使用实际示例sed命令可用于文本替换 在本教程结束时 您将对以下方面有更深入的了解sed及其在文本替换中的实际应用 目录 hide 1 将 URL 中的 HTTP 更改为 HTTPS 2 用下划线替换空格 3 更
  • 数据帧过滤:在 Pandas 查询中使用正则表达式

    The 查询 方法Pandas 中允许您根据查询表达式过滤 DataFrame 行 将正则表达式 regex 的强大功能与query 方法允许更高级和灵活的查询 本教程将指导您完成使用正则表达式的过程query 熊猫中的方法 目录 hide
  • 使用 to_xml 将 Pandas DataFrame 转换为 XML 文件

    The to xml方法允许您将 DataFrame 转换为 XML 格式 在本教程中 我们将逐步完成导出Pandas使用 DataFrame 到 XML 文件to xml method 目录 hide 1 Pandas to xml 语法
  • 使用 to_csv 将 Python Pandas DataFrame 导出到 CSV 文件

    The to csv函数允许您从a写入数据PandasDataFrame 到 CSV 文件 当您需要保存 共享或导出数据以便在不同的环境或应用程序中进一步使用或分析时 这非常有用 它带有多个参数 可帮助您根据需要自定义流程 例如 您可以选择
  • 使用 Linux-PAM 增强 Linux 身份验证

    在上一篇文章中 我们讨论了Linux iptables 防火墙 还有人问认证问题 今天我们来聊聊Linux中用于身份验证的强大框架 那就是Linux PAM PAM or 可插拔的身份验证模块是位于 Linux 应用程序和 Linux 本机
  • Linux gzip 命令:综合教程

    gzip 代表 GNU zip 是基于 Unix 的系统上用于压缩和解压缩文件的流行工具 该工具不仅仅压缩单个文件 与其他工具 例如tar用于压缩目录 目录 hide 1 命令结构和选项 2 压缩和解压文件 3 了解 gzip 中使用的压缩
  • 使用 Pandas read_xml 将 XML 文件解析为 DataFrame

    The read xml函数于Pandas用于读取 XML 可扩展标记语言 文件并将其转换为 DataFrame 让我们深入研究实际示例来了解它是如何工作的 目录 hide 1 Pandas read xml 语法 2 Read from
  • Python 中的 JSON 操作和转换技术

    在本教程中 您将学习各种 JSON 处理技术 例如加载 JSON 对象 写入 排序 JSON 或解析 JSON 等 JSON 代表JavaScript Object N代表结构化数据的otation JSON 数据用于交换信息 在Pytho