在 Python 中加载 JSON 文件——如何读取和解析 JSON

在本文中,你将学习如何在 Python 中读取和解析 JSON。

什么是 JSON

JSON 是 JavaScript Object Notation 的缩写。这是一种以名称-值对的形式存储数据的简单语法。值可以是各种有效的数据类型。 JSON 不可接受的类型包括函数、日期和 undefined

JSON 文件以具有有效 JSON 结构的 .json 扩展名存储。

以下是 JSON 文件的结构:

{
  "name": "John",
  "age": 50,
  "is_married": false,
  "profession": null,
  "hobbies": ["traveling", "photography"]
}

你将经常使用 JSON 在 Web 应用程序中从服务器发送和接收数据。

收到数据后,程序读取并解析 JSON 以提取特定数据。不同的语言有不同的方法来做到这一点。我们将在此处了解如何在 Python 中执行这些操作。

如何读取 JSON 文件

假设上面代码块中的 JSON 存储在 user.json 文件中。使用 Python 中的 open() 内置函数,我们可以读取该文件并将内容分配给一个变量,就是这样:

with open('user.json') as user_file:
  file_contents = user_file.read()
  
print(file_contents)
# {
#   "name": "John",
#   "age": 50,
#   "is_married": false,
#   "profession": null,
#   "hobbies": ["travelling", "photography"]
# }

你将文件路径传递给 open 方法,该方法打开文件并将文件中的流数据分配给 user_file 变量。使用 read 方法,你可以将文件的文本内容传递给 file_contents 变量。

我在表达式的开头使用了 with,以便在读取文件内容后,Python 可以关闭文件。

file_contents 现在包含 JSON 的字符串版本。下一步,你可以解析 JSON 了。

如何解析 JSON

Python 具有用于各种操作的内置模块。为了管理 JSON 文件,Python 有 json 模块。

该模块带有许多方法。其中之一是用于解析 JSON 字符串的 load() 方法。然后,你可以将解析后的数据分配给如下变量:

import json

with open('user.json') as user_file:
  file_contents = user_file.read()
  
print(file_contents)

parsed_json = json.loads(file_contents)
# {
#   'name': 'John',
#   'age': 50,
#   'is_married': False,
#   'profession': None,
#   'hobbies': ['travelling', 'photography']
# }

使用 load() 方法,你可以看到 parsed_json 变量现在有一个有效的字典。从此字典中,你可以访问其中的键和值。

另请注意 JSON 中的 null 如何在 Python 中转换为 None。这是因为 null 在 Python 中无效。

如何使用 json.load() 读取和解析 JSON 文件

json 模块还具有 load 方法,你可以使用它来读取文件对象并同时对其进行解析。使用此方法,你可以将之前的代码更新为:

import json

with open('user.json') as user_file:
  parsed_json = json.load(user_file)

print(parsed_json)
# {
#   'name': 'John',
#   'age': 50,
#   'is_married': False,
#   'profession': None,
#   'hobbies': ['travelling', 'photography']
# }

不使用文件对象的 read 方法和 json 模块的 loads 方法,你可以直接使用读取和解析文件对象的 load 方法。

小结

JSON 数据以其简单的结构而闻名,并且在服务器和客户端之间的信息交换中很受欢迎(在大多数情况下是一种标准)。

不同的语言和技术可以以不同的方式读取和解析 JSON 文件。在本文中,我们学习了如何读取 JSON 文件并使用文件对象的 read 方法以及 json 模块的 load 方法解析此类文件。