如何在 Python 中解析 JSON

理解Python中的JSON数据处理

JSON(JavaScript Object Notation)是一种广泛应用的数据交换格式。Python自带的JSON模块提供了处理JSON数据的强大功能。本文将引导您掌握在Python中使用JSON的方法。

学完本教程,您将能够:

  • 理解JSON的基本概念。
  • 掌握在Python中解析和生成JSON字符串的技巧。
  • 学会如何在Python中读写JSON文件。

让我们开始探索吧!🚀

什么是JSON?

JSON,即JavaScript对象表示法,是一种基于文本的数据交换格式。虽然JSON最初受到JavaScript对象的启发,但现在几乎所有编程语言都支持它。

无论您是使用API接口还是查看配置文件,都有可能接触到JSON。

📑 JSON常用于API的数据传输,以及软件应用中的客户端-服务器通信。此外,JSON还可以作为通用数据存储的格式。

JSON的结构与Python字典非常相似。字典是Python中一种强大的内置数据结构,用于存储键值对。

在深入探讨之前,请注意以下几点:

  • 在Python中,JSON对象会被解析为字典。
  • JSON中的数组对应于Python列表。
  • JSON中的布尔值表示为true和false,在Python中则对应True和False。

更多关于JSON到Python数据类型转换的详细信息,请参考官方文档

由于json模块是Python标准库的一部分,无需额外安装,可以直接导入:

import json

如何在Python中加载JSON字符串

在Python中加载JSON字符串的基本语法如下:

        <dict_obj> = json.loads(<json_str>)
    

其中:

  • <dict_obj>是将要加载JSON字符串的Python字典。
  • <json_str>是有效的JSON字符串。

此操作会将<json_str>解析并存储到Python字典<dict_obj>中。

以下是一个示例。json_str是一个JSON字符串:

        json_str="""
{
    "books": [
        {
            "title": "The Wind in the Willows",
            "author": "Kenneth Grahame",
            "year": "1908"
        },
        {
            "title": "To the Lighthouse",
            "author": "Virginia Woolf",
            "year": "1927"
        }
    ]
}
"""
    

以下代码展示如何使用loads()方法将JSON字符串json_str加载到Python字典中。使用内置的type()函数可以验证py_dict确实是一个Python字典。

        py_dict = json.loads(json_str)
        type(py_dict)
        # 输出: dict
        print(py_dict)
        # 输出
        {'books': [{'title': 'The Wind in the Willows', 'author': 'Kenneth Grahame', 'year': '1908'}, {'title': 'To the Lighthouse', 'author': 'Virginia Woolf', 'year': '1927'}]}
    

如上述代码所示,JSON字符串中的所有字段都变成了py_dict中的键值对。

如何在Python中创建JSON字符串

如果有一个Python字典,该如何将其转换为JSON字符串呢?

可以使用dumps()方法,其语法如下:

        <json_str> = json.dumps(<dict_obj>)
    

其中:

  • <dict_obj>是要转换为JSON字符串的Python字典。
  • <json_str>是生成的JSON字符串。

因此,dumps()方法会将<dict_obj>转换为JSON字符串<json_str>

让我们在现有的Python字典py_dict中添加一个新的键”movies”。代码如下:

        py_dict["movies"] = [{"title":"The Imitation Game","year":"2014","lang":"en","watched":True}]
    

现在,使用dumps()方法将修改后的字典转换为一个新的JSON字符串json_str2

        json_str2 = json.dumps(py_dict)
        print(json_str2)
        # 输出
        {"books": [{"title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908"}, {"title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927"}], "movies": [{"title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true}]}
    

如上例所示,未格式化的JSON字符串难以阅读。可以使用可选参数indent来添加缩进,从而提高可读性。

通过将indent设置为一个整数,如2,即可实现缩进,如下所示:

        json_str2 = json.dumps(py_dict, indent = 2)
        print(json_str2)
        # 输出
{
  "books": [
    {
      "title": "The Wind in the Willows",
      "author": "Kenneth Grahame",
      "year": "1908"
    },
    {
      "title": "To the Lighthouse",
      "author": "Virginia Woolf",
      "year": "1927"
    }
  ],
  "movies": [
    {
      "title": "The Imitation Game",
      "year": "2014",
      "lang": "en",
      "watched": true
    }
  ]
}
    

可以看到,输出已经使用了缩进进行格式化,更易于理解。

注意:💡如果需要按字母顺序对键进行排序,可以将sort_keys参数设置为True。

如下所示,键现在已按字母顺序排列:

        json_str2 = json.dumps(py_dict, indent = 2, sort_keys=True)
        print(json_str2)
        # 输出
{
  "books": [
    {
      "author": "Kenneth Grahame",
      "title": "The Wind in the Willows",
      "year": "1908"
    },
    {
      "author": "Virginia Woolf",
      "title": "To the Lighthouse",
      "year": "1927"
    }
  ],
  "movies": [
    {
      "lang": "en",
      "title": "The Imitation Game",
      "watched": true,
      "year": "2014"
    }
  ]
}
    

键现在按照”author”、”title”和”year”的字母顺序显示。

至此,您已经学习了如何在Python中使用JSON字符串。接下来,您将学习如何使用JSON文件。

如何在Python中读取JSON文件

在Python中读取JSON文件的基本语法如下:

        json.load(<json-file>)
    

其中<json-file>是有效的JSON文件。

请注意,这里使用的是load()方法,而不是loads()方法。 loads()用于加载JSON字符串,而load()用于加载JSON文件。

在Python中处理文件时,建议使用上下文管理器。当然,您也可以尝试不使用上下文管理器读取文件:

        my_file = open('students.json','r')
        contents = my_file.read()
        print(contents)
        file.close()
    

如果不关闭文件,可能会造成资源浪费。

而使用上下文管理器时,文件操作完成后会自动关闭。

使用上下文管理器读取文件的代码如下:

        with open('students.json','r') as file:
            data = json.load(file)
            print(data)
        # 输出
        {'students': [{'roll_num': 'cs27', 'name': 'Anna', 'course': 'CS'}, {'roll_num': 'ep30', 'name': 'Kate', 'course': 'PHY'}]}
    

从文件中读取数据时,请确保将模式指定为读取模式,即代码中的’r’。

注意:为了方便访问当前目录下的文件,请确保JSON文件与main.py文件位于同一文件夹下。如果JSON文件位于其他文件夹,请指定文件的完整路径。

以下是读取JSON文件的示例。

接下来,您将学习如何写入JSON文件。✍

如何在Python中写入JSON文件

要写入现有的JSON文件或创建新的JSON文件,可以使用dump()方法,其语法如下:

        json.dump(<dict_obj>,<json_file>)
    

其中:

  • <dict_obj>是Python字典。
  • <json_file>是JSON文件。

以上语法将字典<dict_obj>写入到JSON文件<json_file>中。

在前一章节中,我们已经有字典py_dict。现在,让我们将其写入到一个新的JSON文件中,命名为new_file.json。

以下代码片段展示了如何使用dump()函数:

        with open('new_file.json','w') as file:
            json.dump(py_dict,file)
    

注意:以写入模式(‘w’)打开文件会覆盖文件原有的内容。如果文件不存在,则会创建一个新文件。

执行上述代码后,您会在当前工作目录下看到一个新的JSON文件。可以检查该JSON文件的内容。

在Python中创建JSON文件

写入文件时,数据的存储是核心目标。如果需要保留格式,还可以使用indentsort_keys参数。

结论

⏲ 让我们快速回顾一下。

在本教程中,您学习了:

  • JSON的基本概念。
  • 如何分别使用loads()load()方法读取JSON字符串和JSON文件。
  • 如何分别使用dumps()dump()方法将Python字典转换为JSON字符串和JSON文件。

希望本教程对您有所帮助。祝您学习愉快!

您还可以探索用于解析、格式化和验证的JSON工具。