当前位置:首页>python>Python 读写 JSON 文件:从 JSON 文本到 dict 字典的实操理解

Python 读写 JSON 文件:从 JSON 文本到 dict 字典的实操理解

  • 2026-10-11 08:14:52
Python 读写 JSON 文件:从 JSON 文本到 dict 字典的实操理解

001 JSON 是什么?

JSON 是一种轻量级的数据格式,常用于保存配置文件、接口数据、用户信息、设备参数等。它本质上是文本文件,人可以读,程序也可以读。在 Python 中,我们通常会把 JSON 文件读取出来,然后转换成 dict 字典来使用。

002 JSON 和 Python dict 的区别

JSON 和 Python 字典长得很像,但它们不是同一个东西。

JSON 是一种数据格式。我们常说的 JSON 文件,可以理解成一种“专门用来存数据的文本”。

比如软件配置、用户信息、参数内容,都可以写到一个 .json 文件里。程序下次启动时,还可以再把这些内容读出来。

而 dict 是 Python 程序里的“字典数据类型”。

JSON 文件里的内容,Python 不能直接当字典来用。要先把 JSON 文件读进来,转换成 dict 类型的变量,然后才能像操作普通字典一样,读取、修改里面的数据。

003 准备JSON文件

简单的软件配置文件:

{  "app": {    "name": "DemoSystem",    "version": "1.0.0",    "debug": true  },  "server": {    "host": "127.0.0.1",    "port": 8000  },  "users": [    {      "name": "Tom",      "role": "admin",      "active": true    },    {      "name": "Jerry",      "role": "operator",      "active": false    }  ]}

这个 JSON 文件整体是一个 对象,最外层用 {} 包起来。

你可以先把它理解成:

一个总的数据包,里面分成三块:1. app:软件信息2. server:服务器信息3. users:用户列表
变成 Python 字典,等价于:
data = {    "app": {        "name": "DemoSystem",        "version": "1.0.0",        "debug": True    },    "server": {        "host": "127.0.0.1",        "port": 8000    },    "users": [        {            "name": "Tom",            "role": "admin",            "active": True        },        {            "name": "Jerry",            "role": "operator",            "active": False        }    ]}

最外层的{}包起来的,这就是一个典型的字典,字典里面有三组键值对:

{    "app": {...},    "server": {...},    "users": [...]}

我们这里的值又可以是字典、列表;列表里面又可以包字典。

004 读取 JSON 文件

# 导入 Python 自带的 json 模块# json 模块专门用来处理 JSON 数据# 比如:把 JSON 字符串转换成 Python 字典,或者把 Python 字典转换成 JSON 字符串import json# 从 pathlib 模块中导入 Path# Path 用来处理文件路径,比直接写字符串路径更方便from pathlib import Path# 创建一个 Path 对象,表示当前目录下的 config.json 文件# 注意:这里只是表示这个文件路径,还没有真正读取文件内容file_path = Path("config.json")# 读取 config.json 文件中的文本内容# encoding="utf-8" 表示使用 UTF-8 编码读取文件# 如果 JSON 文件中有中文,建议加上 encoding="utf-8",避免乱码# 读取完成后,text 是一个字符串类型的数据text = file_path.read_text(encoding="utf-8")# 把 JSON 字符串转换成 Python 数据# 如果 JSON 最外层是 { },转换后通常就是 Python 字典 dict# 如果 JSON 最外层是 [ ],转换后通常就是 Python 列表 list# 这里 config.json 最外层一般是 { },所以 data 通常是 dict 类型data = json.loads(text)# 打印 data 的数据类型# 用来确认 json.loads() 转换后的结果是什么类型# 常见输出:<class 'dict'>print(type(data))# 打印转换后的数据内容# 此时 data 已经不是 JSON 字符串,而是 Python 可以直接操作的数据对象# 如果 data 是字典,就可以使用 data["key"] 的方式取值print(data)

005 读取字典里的值

# data["app"] 先取出 app 这一层字典# data["app"]["name"] 再从 app 字典里取出 name 的值# 例如取到的结果可能是:"DemoSystem"app_name = data["app"]["name"]# data["app"] 取出 app 字典# ["version"] 取出版本号# 例如取到的结果可能是:"1.0.0"version = data["app"]["version"]# data["server"] 先取出 server 这一层字典# data["server"]["host"] 再从 server 字典里取出 host 的值# 例如取到的结果可能是:"127.0.0.1"host = data["server"]["host"]# 略port = data["server"]["port"]# 打印软件名称print(app_name)# 打印版本号print(version)# 打印服务器地址print(host)# 打印服务器端口print(port)

006 读取列表数据

users = data["users"]first_user = users[0]print(first_user["name"])print(first_user["role"])print(first_user["active"])
data["users"] 是一个列表。users[0] 是列表里的第一个用户。users[0]["name"] 是第一个用户的名字。

也可以循环读取:

for user in data["users"]:    print(user["name"], user["role"], user["active"])

007 修改 dict 中的数据

data["app"]["debug"] = Falsedata["server"]["port"] = 9000data["users"][1]["active"] = True
这里修改的是 Python 内存里的 dict。此时 config.json 文件本身还没有变化。要想真正保存到文件,需要再写回 JSON。

008 保存回 JSON 文件

new_text = json.dumps(data, ensure_ascii=False, indent=2)Path("config.json").write_text(new_text, encoding="utf-8")
json.dumps() 把 dict 转成 JSON 字符串。ensure_ascii=False 用来保证中文正常显示。indent=2 让 JSON 文件格式更清晰。write_text() 把 JSON 字符串写入文件。
查看config.json文件,修改已生效:
OverOver!

负步长FOR循环:当有一条新报警触发时,把这条新报警插到历史数组第 1 位,原来的历史记录整体往后挪一格。

收藏!倍福EL2502,两路PWM模块测试随笔。附24V PWM信号转5V PWM信号介绍。

详细!Python编写软件(用tkinter模块设计简单GUI,通讯库用pyads)与倍福PLC的ADS通讯之实例演示

考古倍福TwinCAT2数据类型:标准数据类型AND用户数据类型。惯用手法写程序测试!

最新文章

随机文章