如何解析 Python 中的 JSON

17 Mar 2025 | 4 分钟阅读

基础/先决知识简述

JSON 代表“JavaScript 对象表示法”。它是一种标准的语法样式,用于以文件的形式存储和交换数据(互联)通过网络。JSON 的语法只是简单的文本,这使其更高级。它源自 JavaScript,但使用上是与语言无关的。数据存储是通过在几乎所有编程语言中以某种形式使用的两种数据结构实现的

  1. 键值对也称为对象、记录、结构、哈希表、键控列表或字典。
  2. 数据值的有序集合,如数组、向量或列表。

JSON 文件具有 .json 扩展名,网络传输在各种电子和数字系统应用中广泛使用。程序员必须将数据解析到某些编程语言中才能处理 JSON 文件中的人类可读数据。几乎所有编程语言都有内置的软件/模块来与这些文件交互。

JSON 数据表示示例

如以上示例所示,JSON 文件以键值对和序列(如列表、数组等)的形式存储数据。

本教程将解释 Python 解析 JSON 文件的方法。

包:json

Python 有一个内置包,用于与这些文件交互,称为“json”。程序员必须将此包导入到代码中才能处理来自 json 文件的数据。

因此,程序员必须开始的第一行代码是

Python 中与 JSON 文件等效的数据类型

PythonJSON
字典Object
stringstring
列表和元组数组
整数、长整数、浮点数、双精度浮点数数字
truetrue
Falsefalse
null

在上面以 JSON 文件形式表示的学生信息中,使用了数字、字符串和数组。在 Python 中处理 JSON 文件,有两种可能的机制

  1. 序列化或编码
  2. 反序列化或解码
  • 序列化是指将 Python 对象编码为其等效的 JSON 字节序列,以便通过网络传输数据。
  • 另一方面,反序列化是指将 JSON 字节解码为等效的 Python 对象。
  • 在 JSON 包中,有两种方法可以简化这些过程
  1. 编码:json.dump() 和 json.dumps()
  2. 解码:json.load() 和 json.loads()

本文讨论了解析概念,其中反序列化是该概念。

  • 解析是指将文件组件分解成部分,并将 JSON 数据解码到相应的编程语言中,在本例中是 Python。

load() 和 loads()

1. load() 方法的目的是读取给定的 JSON 文件。

语法

2. loads() 方法的目的是将 JSON 文件中的数据转换为 Python 字典,从而解码数据。

语法

示例

输出

How to Parse JSON in Python

请记住的要点

我们提供给 loads() 的 JSON 对象可以是字符串、字节或字节数组,但不能是字典。在上面的代码中,使用 "" 给出的是一个多行字符串。

  • 使用在线 JSON 验证网站检查 JSON 表示是否正确。

load() 和 loads() 之间的区别

load() 和 loads() 都会将 JSON 数据反序列化为 Python 字典。区别在于load() 方法以文件作为输入,读取它,并将其转换为 Python 字典。相比之下,loads() 方法以原生 JSON 字符串/字节或字节数组的形式接受 JSON 数据作为输入,并将其转换为 Python 字典。

在 Python 中读取 JSON 文件

假设一些 JSON 数据存储在一个文件,例如 "samplefile.json" 中。要解析文件的数据,我们需要使用 load() 方法读取文件。

How to Parse JSON in Python

代码

输出

How to Parse JSON in Python

load() 和 loads() 的扩展语法

load()

  • fp: 从文件中读取 JSON 数据的为文件指针。
  • object_hook: 指定此参数的类型会将 JSON 数据解码为指定的类型。默认设置为 None。它主要用于为不同的需求创建自定义解码器。
  • parse_float, parse_int, 和 parse_constant: 在解码文件中的 JSON 浮点数、整数和常量时,会调用这三个参数。这三个参数的默认值均为 None。
  • object_pairs_hook: 这也类似于 object_hook 参数。它用于创建自定义解码器,但不同之处在于,在这里,JSON 字符串将被解析为元组列表,而在 object_hook 中,它将被解析为字典。通过使用此参数,可以避免重复键。

loads()

s: 要解析的 JSON 数据

  • 所有其他参数与 load() 方法相同。

object_hook 和 object_pairs_hook 参数

输出

How to Parse JSON in Python

理解

当打印 object_pairs_hook 参数时,JSON 数据被解析为字典,而当打印 object_hook 参数时,JSON 数据被解析为元组列表。