Python 读取 JSON 文件

JSON 是什么?

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

JSON

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 文件,整个项目结构如下图所示。

Python 读取 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 教程。

上一篇: Python 写入 CSV

下一篇: Python 写入 JSON

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号