在 Python 中展平 JSON
本教程将讨论使用 Python 中的条件语句、循环和 type() 函数来展平 JSON。
在 Python 中展平 JSON
JSON 是一种文件格式,它代表 JavaScript Object Notation。 JSON 存储和传输人类可以阅读和理解的数据。
我们在 JSON 文件中看到不同的属性,其值由数组或列表分隔。 例如,我们可以使用 JSON 文件来存储学生的姓名、年龄、地址和班级等数据。
每个学生的数据将存储在一个包含不同数据类型的属性和值的数组中。 例如,下面给出了一个示例 JSON 文件。
{"Ali" : {
"age": 18,
"profession": "student"},
"Ammar" : {
"age" : "nineteen",
"profession": "mechanic"}
}
上面的文件包含两个人的信息,我们可以使用Python的json库读取。 例如,使用json库读取上面的文件并显示其内容。
请参阅下面的代码。
import json
json_file = open('people.json')
data = json.load(json_file)
print('Original Data\n',data)
输出:
Original Data
{'Ali': {'age': 18, 'profession': 'student'}, 'Ammar': {'age': 'nineteen', 'profession': 'mechanic'}}
我们必须在 open()
函数中提供文件名及其扩展名才能读取它,如果文件与 Python 文件不在同一目录中,我们必须提供文件的完整路径及其名称和 open() 函数中的扩展。 我们使用 json 库的 load() 函数来读取 JSON 数据。
我们可以在数据变量中使用他的名字来获取一个人的数据,如 data['Ali']
。 如果我们有一个包含大量数据的多级 JSON 文件,就很难读取特定属性的值。
在多级 JSON 文件中,我们在其他属性(如列表或字典)中有属性。 如果我们想将多级 JSON 文件转换为单级,我们可以组合属性名称。
例如,在上面的代码中,如果我们想获取Ali的年龄,我们可以使用 data['Ali']['age']
来访问它,但是如果我们结合属性名,我们可以使用 data['Ali_age ']
得到 Ali_age。
我们可以使用一个会多次调用自身的递归函数来展平 JSON 数据。 我们必须从 JSON 文件中读取数据,并使用两个循环来检查数据中的列表和字典。
我们将使用循环将属性的名称与分隔符组合起来,并将其值以字典格式保存。 当 JSON 文件中没有更多数据时,循环将停止,并返回结果。
例如,让我们展平上面的 JSON 文件。 请参阅下面的代码。
import json
json_file = open('people.json')
data = json.load(json_file)
print('Original Data\n',data)
def flatten_json_data(json_data):
out = {}
def flatten_json(d, name=''):
if type(d) is dict:
for a in d:
flatten_json(d[a], name + a + '_')
elif type(d) is list:
i = 0
for a in d:
flatten_json(a, name + str(i) + '_')
i += 1
else:
out[name[:-1]] = d
flatten_json(json_data)
return out
flattened_data = flatten_json_data(data)
print('\nflatten Data\n',flattened_data)
输出:
Original Data
{'Ali': {'age': 18, 'profession': 'student'}, 'Ammar': {'age': 'nineteen', 'profession': 'mechanic'}}
flatten Data
{'Ali_age': 18, 'Ali_profession': 'student', 'Ammar_age': 'nineteen', 'Ammar_profession': 'mechanic'}
在上面的代码中,我们使用 if-else 条件语句来检查输入数据类型和 type() 函数,该函数返回对象的数据类型。 在读取数据时,如果有 dict 来,第一个循环将起作用; 如果出现列表,第二个循环将起作用。
在上面的输出中,我们可以看到原始数据包含两个字典,但扁平化后的数据只包含一个字典。 示例 JSON 文件不包含任何列表,但上面的代码也适用于包含列表的 JSON 文件。
原始数据和扁平化后的数据存在差异; 我们可以使用原始数据同时获取一个人的年龄和职业,因为年龄和职业具有相同的父属性,即人的姓名,但我们不能使用扁平化的数据。
扁平化后的数据要得到一个人的年龄和职业,我们得一个一个分开来。
当我们只需要获取单个值时,扁平化的 JSON 文件很有用,但如果我们想获取有关对象或属性的所有信息,我们可以使用原始 JSON 文件。
相关文章
Django 中的 Slug
发布时间:2023/05/04 浏览次数:173 分类:Python
-
本篇文章旨在定义一个 slug 以及我们如何使用 slug 字段在 Python 中使用 Django 获得独特的帖子。
在 Django 中按降序过滤查询集中的项目
发布时间:2023/05/04 浏览次数:157 分类:Python
-
在这个讲解中,学习如何借助 Django 中的 order_by() 方法按降序过滤出查询集中的项目。
Django ALLOWED_HOSTS 介绍
发布时间:2023/05/04 浏览次数:181 分类:Python
-
本文展示了如何创建您的 Django 网站,为公开发布做好准备,如何设置 ALLOWED_HOSTS 以及如何在使用 Django 进行 Web 部署期间修复预期的主要问题。
Django 中的 Select_related 方法
发布时间:2023/05/04 浏览次数:129 分类:Python
-
本文介绍了什么是查询集,如何处理这些查询以及我们如何利用 select_related() 方法来过滤 Django 中相关模型的查询。
使用 Post 请求将数据发送到 Django 服务器
发布时间:2023/05/04 浏览次数:159 分类:Python
-
在这篇关于Django的讲解中,我们简要介绍了post和get请求以及如何在Django中用post实现CSRF token。
Django 返回 JSON
发布时间:2023/05/04 浏览次数:106 分类:Python
-
在与我们的讨论中,我们简要介绍了 JSON 格式,并讨论了如何借助 Django 中的 JsonResponse 类将数据返回为 JSON 格式。
在 Django 中创建对象
发布时间:2023/05/04 浏览次数:59 分类:Python
-
本文的目的是解释什么是模型以及如何使用 create() 方法创建对象,并了解如何在 Django 中使用 save() 方法。
在 Django 中为多项选择创建字段
发布时间:2023/05/04 浏览次数:75 分类:Python
-
在本文中,我们将着眼于为多项选择创建一个字段,并向您展示如何允许用户在 Django 中进行多项选择。