迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

在 Python 中展平 JSON

作者:迹忆客 最近更新:2023/04/25 浏览次数:

本教程将讨论使用 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 文件。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Django 中的 Slug

发布时间:2023/05/04 浏览次数:173 分类:Python

本篇文章旨在定义一个 slug 以及我们如何使用 slug 字段在 Python 中使用 Django 获得独特的帖子。

Django ALLOWED_HOSTS 介绍

发布时间:2023/05/04 浏览次数:181 分类:Python

本文展示了如何创建您的 Django 网站,为公开发布做好准备,如何设置 ALLOWED_HOSTS 以及如何在使用 Django 进行 Web 部署期间修复预期的主要问题。

Django 中的 Select_related 方法

发布时间:2023/05/04 浏览次数:129 分类:Python

本文介绍了什么是查询集,如何处理这些查询以及我们如何利用 select_related() 方法来过滤 Django 中相关模型的查询。

在 Django 中上传媒体文件

发布时间:2023/05/04 浏览次数:198 分类:Python

在本文中,我们简要介绍了媒体文件以及如何在 Django 项目中操作媒体文件。

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 中进行多项选择。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便