在 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 文件。
相关文章
Pandas DataFrame DataFrame.shift() 函数
发布时间:2024/04/24 浏览次数:133 分类:Python
-
DataFrame.shift() 函数是将 DataFrame 的索引按指定的周期数进行移位。
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
Pandas read_csv()函数
发布时间:2024/04/24 浏览次数:254 分类:Python
-
Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。
Pandas 多列合并
发布时间:2024/04/24 浏览次数:628 分类:Python
-
本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。
Pandas loc vs iloc
发布时间:2024/04/24 浏览次数:837 分类:Python
-
本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串