Python读取JSON文件及一些常见的陷阱和改进方法

 更新时间:2024年10月30日 09:58:44   作者:XuanRanDev  
在Python编程中处理JSON文件是一项基本但关键的技能,文章通过一个简单的读取JSON文件的代码示例出发,分析了代码中存在的问题,将遇到的问题解决方法介绍也非常详细,需要的朋友可以参考下

前言

在 Python 编程中,JSON(JavaScript Object Notation)是一种常用的轻量级数据交换格式。我们经常需要从本地文件中读取 JSON 数据并进行处理。本文将以一个简单的读取 JSON 文件的代码示例为起点,逐步进行优化,同时深入探讨一些常见的陷阱和改进方法。

1. 初始代码:简单的 JSON 文件读取

以下是最基础的读取本地 JSON 文件的代码示例:

import json

global data;

if __name__ == '__main__':
    with open('account.json', 'r', encoding='utf-8') as file:
        data = json.load(file)

    print(data)

这段代码能够正常读取本地名为 account.json 的 JSON 文件,并将其内容打印出来。然而,代码中有一些可以优化的地方,尤其是在变量作用域和代码可扩展性方面。

2. 分析与优化方向

  • global 的使用:代码中的 global 关键字用来声明全局变量,通常用于在函数内部修改全局变量的值。但在此代码中,data 变量是在主作用域中定义并使用的,global 其实是多余的。去掉 global 不会影响代码的正常运行,并且使代码更简洁。

  • 异常处理:当前的代码假设文件始终存在且格式正确,但在真实环境中,可能会出现文件路径错误、文件不存在或 JSON 格式不正确的情况。如果不处理这些情况,程序会直接崩溃并抛出错误。因此,引入异常处理机制是非常重要的改进。

  • 函数封装:为了使代码具有更好的可维护性和复用性,建议将读取 JSON 文件的逻辑封装成一个函数。这样不仅提高了代码的清晰度,还便于以后调用。

3. 代码优化步骤

我们从去掉多余的 global 关键字开始,然后逐步进行代码优化。

去掉 global 关键字

在 Python 中,global 通常用于函数内部来修改全局变量。在当前场景下,data 是在主函数中定义的,因此是全局变量,根本不需要显式使用 global。去掉 global 后,代码更清晰:

import json

if __name__ == '__main__':
    with open('account.json', 'r', encoding='utf-8') as file:
        data = json.load(file)

    print(data)

增加异常处理

为了让代码更加健壮,我们需要考虑以下几个场景:

  • 文件不存在。
  • JSON 文件格式不正确。

可以通过 try-except 语句来捕获这些异常,并在发生错误时给出用户友好的提示:

import json

if __name__ == '__main__':
    try:
        with open('account.json', 'r', encoding='utf-8') as file:
            data = json.load(file)
        print(data)
    except FileNotFoundError:
        print("文件未找到,请检查文件路径")
    except json.JSONDecodeError:
        print("文件格式错误,请检查是否为有效的 JSON 格式")

函数封装

为了提高代码的模块化和可复用性,我们将文件读取的逻辑封装到一个函数中。这样,当你在其他地方需要读取 JSON 文件时,直接调用这个函数即可,避免代码重复:

import json

def load_json_file(file_path):
    """读取 JSON 文件并返回解析后的数据"""
    try:
        with open(file_path, 'r', encoding='utf-8') as file:
            return json.load(file)
    except FileNotFoundError:
        print(f"文件 '{file_path}' 未找到")
    except json.JSONDecodeError:
        print(f"文件 '{file_path}' 格式错误")
    return None

if __name__ == '__main__':
    data = load_json_file('account.json')
    
    if data:
        print(data)

4. 代码解释

  • 函数 load_json_file():此函数接受一个文件路径作为参数,负责读取并解析 JSON 文件。它不仅提高了代码的可读性和扩展性,还便于错误处理。

  • 异常处理:我们使用 FileNotFoundError 来处理文件不存在的情况,使用 json.JSONDecodeError 处理文件内容格式不正确的情况。这些异常处理有助于提高代码的健壮性,避免因文件问题导致的程序崩溃。

  • if data::在读取文件时,返回的 data 可能是 None(在文件读取失败的情况下)。因此,我们需要检查数据是否成功读取,只有成功时才输出内容。

5. 小结

通过一系列的优化步骤,我们使得代码从最初的简单读取 JSON 文件,变得更具容错性和扩展性。这些改进包括去掉不必要的 global 关键字、增加异常处理以及通过函数封装提高代码的可维护性。

最终优化后的代码更具通用性,可以处理各种潜在的异常,同时结构更加清晰、简洁。无论是初学者还是有经验的开发者,都可以从这篇文章中学到如何编写更健壮的 Python 代码。

扩展阅读

到此这篇关于Python读取JSON文件及一些常见的陷阱和改进方法的文章就介绍到这了,更多相关Python读取JSON文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python-itchat 获取微信群用户信息的实例

    python-itchat 获取微信群用户信息的实例

    今天小编就为大家分享一篇python-itchat 获取微信群用户信息的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • python类的继承实例详解

    python类的继承实例详解

    这篇文章主要介绍了python类的继承实例详解的相关资料,需要的朋友可以参考下
    2017-03-03
  • 对Python中TKinter模块中的Label组件实例详解

    对Python中TKinter模块中的Label组件实例详解

    今天小编就为大家分享一篇对Python中TKinter模块中的Label组件实例详解,具有很好的价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Python实现平行坐标图的两种方法小结

    Python实现平行坐标图的两种方法小结

    今天小编就为大家分享一篇Python实现平行坐标图的两种方法小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python实现双向RNN与堆叠的双向RNN的示例代码

    Python实现双向RNN与堆叠的双向RNN的示例代码

    这篇文章主要为大家详细介绍了如何利用Python语言实现双向RNN与堆叠的双向RNN,文中详细讲解了双向RNN与堆叠的双向RNN的原理及实现,需要的可以参考一下
    2022-07-07
  • 如何利用Python动态模拟太阳系运转

    如何利用Python动态模拟太阳系运转

    这篇文章主要给大家介绍了关于如何利用Python动态模拟太阳系运转的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Pandas中八个常用option设置的示例详解

    Pandas中八个常用option设置的示例详解

    通过pandas的使用,我们经常要交互式地展示表格(dataframe)、分析表格。本文整理了8个常用的配置选项,使用可以提高很多效率,需要的可以参考一下
    2022-06-06
  • 利用Python为iOS10生成图标和截屏

    利用Python为iOS10生成图标和截屏

    这篇文章主要为大家详细介绍了利用Python为iOS10生成图标和截屏的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Flask框架的学习指南之开发环境搭建

    Flask框架的学习指南之开发环境搭建

    本文是Flask框架的学习指南系列文章的第一篇,主要给大家讲述的是开发环境的搭建工作,有需要的小伙伴可以参考下
    2016-11-11
  • 利用Python自动生成PPT的示例详解

    利用Python自动生成PPT的示例详解

    在日常工作中,PPT制作是常见的工作。这篇文章主要为大家详细介绍了如何利用Python自动生成PPT,文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-07-07

最新评论