JSON 是什么?
JSON,全称 “JavaScript Object Notation(即JavaScript对象表示法)”,起源于 JavaScript 语言。JSON 起初是 JavaScript 用来处理数据的一种格式,不过由于这种数据格式简单易用,因此 Python 也移植过来使用了。

JSON 有 2 种表示方式:一种是使用 “字典” 来表示,另一种是使用 “列表” 来表示。如果使用 “字典” 来表示,它本质上和字典没什么区别,比如:
{
"book": "Python tutorial",
"author": "Jack",
"price": 99
}如果使用 “列表” 来表示,那么列表的每一个元素一般要求是一个字典,比如:
[
{"name": "Jack", "age": 21},
{"name": "Lucy", "age": 19},
{"name": "Tony", "age": 20}
]JSON 这种数据格式要求非常严格,小伙伴们特别注意以下 2 点:
- 只能使用双引号,不能使用单引号。
- 最后一个元素或键值对的后面不允许有多余的逗号。
Python 如何读取 JSON?
在 Python 中,如果想要读取 JSON 文件,常用的是使用以下 2 种方式来实现。
- 使用 json 模块。
- 使用 pandas 库。
1. 使用 json 模块读取 JSON 文件
在 Python 中,我们可以使用 json 模块的 load() 函数来读取一个 JSON 文件中的数据。json 是 Python 自带的一个内置模块,你不需要额外安装就可以使用它。
语法:
import json
with open(路径, 'r', encoding='utf-8') as f:
data = json.load(f)
……说明:
在当前项目下有一个名为 “data” 的文件夹,然后我们往该文件夹放入一个 fruits.json 文件,整个项目结构如下图所示。

其中,fruits.json 文件内容如下。
[
{ "id": 1, "name": "葡萄", "type": "浆果", "season": "夏", "price": 27.3 },
{ "id": 2, "name": "柿子", "type": "浆果", "season": "秋", "price": 6.4 },
{ "id": 3, "name": "橘子", "type": "浆果", "season": "秋", "price": 11.9 },
{ "id": 4, "name": "山竹", "type": "仁果", "season": "夏", "price": 40.0 },
{ "id": 5, "name": "苹果", "type": "仁果", "season": "秋", "price": 12.6 }
]示例 1:Python 读取 JSON 文件
import json
# 读取文件
with open('data/fruits.json', 'r', encoding='utf-8') as f:
# 转化为 JSON(列表)
data = json.load(f)
print(data)
# 使用列表方法
print(data[0]['name'])运行结果如下。
[{'id': 1, 'name': '葡萄', 'type': '浆果', 'season': '夏', 'price': 27.3}, {'id': 2, 'name': '柿子', 'type': '浆果', 'season': '秋', 'price': 6.4}, {'id': 3, 'name': '橘子', 'type': '浆果', 'season': '秋', 'price': 11.9}, {'id': 4, 'name': '山竹', 'type': '仁果', 'season': '夏', 'price': 40.0}, {'id': 5, 'name': '苹果', 'type': '仁果', 'season': '秋', 'price': 12.6}]
葡萄分析:
使用 print() 函数进行输出,当数据比较多时,展示效果并不理想。想要更好的阅读格式,我们可以使用 Python 自带的一个格式化函数:pprint()。使用 from pprint import pprint 导入,就可以直接使用了。
import json
from pprint import pprint
# 读取文件
with open('data/fruits.json', 'r', encoding='utf-8') as f:
# 转化为 JSON(列表)
data = json.load(f)
pprint(data)
# 使用列表方法
pprint(data[0]['name'])再次运行后结果如下,此时的阅读体验就要好多了。
[{'id': 1, 'name': '葡萄', 'price': 27.3, 'season': '夏', 'type': '浆果'},
{'id': 2, 'name': '柿子', 'price': 6.4, 'season': '秋', 'type': '浆果'},
{'id': 3, 'name': '橘子', 'price': 11.9, 'season': '秋', 'type': '浆果'},
{'id': 4, 'name': '山竹', 'price': 40.0, 'season': '夏', 'type': '仁果'},
{'id': 5, 'name': '苹果', 'price': 12.6, 'season': '秋', 'type': '仁果'}]
'葡萄'2. 使用 pandas 库读取 JSON 文件
在 Python 中,我们还可以使用 pandas 库的 read_json() 函数来读取一个 JSON 文件。Pandas 是第三方库,在使用之前需要确保已经安装了它。
pip install pandas语法:
pd.read_json(path)说明:
path 是必选参数,表示文件路径。read_json() 函数会返回一个 DataFrame,也就是会将 JSON 文件的数据转换成一个 DataFrame 对象。
示例 2:pandas 读取 JSON
import pandas as pd
df = pd.read_json(r'data/fruits.json')
pd.set_option('display.unicode.east_asian_width', True)
print(df)运行结果如下。
id name type season price
0 1 葡萄 浆果 夏 27.3
1 2 柿子 浆果 秋 6.4
2 3 橘子 浆果 秋 11.9
3 4 山竹 仁果 夏 40.0
4 5 苹果 仁果 秋 12.6分析:
从结果可以看出来,df 是一个 DataFrame 对象。read_json() 函数本质上就是将一个文件数据转换成一个 DataFrame。
提示: Pandas 是 Python 数据分析最重要的工具之一,想要更全面深入地了解它,可以学习我们即将上线的 Pandas 教程。
