文章目录
- 定义 JSON(JavaScript Object Notation)是一种轻量级数据交换格式,基于ECMAScript子集,具有以下特性: 语言无关的文本格式 语法类似C语言家族(C/C++/Java/JavaScript等) 人类可读且机器高效解析 广泛用于网络数据传输 Python中的映射关系 JSON数组 ↔ Python列表(list) JSON对象 ↔ Python字典(dict)
- 特性 json 模块 pickle 模块 跨语言支持 ✔️ (多语言兼容) ❌ (仅Python) 数据类型支持 基础类型(字典/列表/字符串/数字) 所有Python类型(类/函数等) 安全性 高(无代码执行风险) 低(可能执行任意代码) 典型用途 API数据交换、配置文件 Python对象持久化存储
- 1. dumps():数据类型 → JSON字符串 import json test_dict = {‘one’: 1, ‘two’: {2.1: [‘a’, ‘b’]}} json_str = json.dumps(test_dict) # 关键操作 print(f”原始类型: {type(test_dict)}”) # <class ‘dict’> print(f”转换后类型: {type(json_str)}”) # <class ‘str’> print(f”JSON字符串: {json_str}”) # {“one”: 1, “two”: {“2.1”: [“a”, “b”]}} 注意:键2.1会被转换为字符串(JSON规范要求键必须是字符串) 2. loads():JSON字符串 → Python数据类型 new_dict = json.loads(json_str) # 解析JSON字符串 print(f”解析后类型: {type(new_dict)}”) # <class ‘dict’> print(f”内容: {new_dict}”) # {‘one’: 1, ‘two’: {‘2.1’: [‘a’, ‘b’]}} 3. dump():字典 → JSON文件 with open(“record.json”, “w”) as f: json.dump(new_dict, f) # 写入文件 print(“JSON文件写入完成”) 生成文件内容: {“one”: 1, “two”: {“2.1”: [“a”, “b”]}} 4. load():JSON文件 → Python字典 with open(“record.json”, “r”) as load_f: load_dict = json.load(load_f) # 从文件加载 print(f”文件解析类型: {type(load_dict)}”) # <class ‘dict’> print(f”内容: {load_dict}”) # {‘one’: 1, ‘two’: {‘2.1’: [‘a’, ‘b’]}}
- 两种等效实现方式: # 方法1:dumps() + 手动写入 with open(“format_json.json”, “w”) as f: f.write(json.dumps(load_dict, indent=4, ensure_ascii=False)) # 方法2:直接使用dump()参数 with open(“format_json.json”, “w”) as f: json.dump(load_dict, f, indent=4, ensure_ascii=False) 关键参数: indent=4:4空格缩进格式化 ensure_ascii=False:支持非ASCII字符(如中文) 格式化后文件: { “one”: 1, “two”: { “2.1”: [ “a”, “b” ] } }
目录
- JSON与Python序列化操作指南
- 一、JSON概述
- 二、序列化模块对比
- 三、json模块核心方法
- 四、JSON文件格式化技巧
- 核心总结
定义
JSON(JavaScript Object Notation)是一种轻量级数据交换格式,基于ECMAScript子集,具有以下特性:
- 语言无关的文本格式
- 语法类似C语言家族(C/C++/Java/JavaScript等)
- 人类可读且机器高效解析
- 广泛用于网络数据传输
Python中的映射关系
JSON数组 ↔ Python列表(list) JSON对象 ↔ Python字典(dict)
| 特性 | json 模块 | pickle 模块 |
|---|---|---|
| 跨语言支持 | ✔️ (多语言兼容) | ❌ (仅Python) |
| 数据类型支持 | 基础类型(字典/列表/字符串/数字) | 所有Python类型(类/函数等) |
| 安全性 | 高(无代码执行风险) | 低(可能执行任意代码) |
| 典型用途 | API数据交换、配置文件 | Python对象持久化存储 |
1. dumps():数据类型 → JSON字符串
import json
test_dict = {'one': 1, 'two': {2.1: ['a', 'b']}}
json_str = json.dumps(test_dict) # 关键操作
print(f"原始类型: {type(test_dict)}") # <class 'dict'>
print(f"转换后类型: {type(json_str)}") # <class 'str'>
print(f"JSON字符串: {json_str}") # {"one": 1, "two": {"2.1": ["a", "b"]}}
注意:键2.1会被转换为字符串(JSON规范要求键必须是字符串)
2. loads():JSON字符串 → Python数据类型
new_dict = json.loads(json_str) # 解析JSON字符串
print(f"解析后类型: {type(new_dict)}") # <class 'dict'>
print(f"内容: {new_dict}") # {'one': 1, 'two': {'2.1': ['a', 'b']}}
3. dump():字典 → JSON文件
with open("record.json", "w") as f:
json.dump(new_dict, f) # 写入文件
print("JSON文件写入完成")
生成文件内容:
{"one": 1, "two": {"2.1": ["a", "b"]}}
4. load():JSON文件 → Python字典
with open("record.json", "r") as load_f:
load_dict = json.load(load_f) # 从文件加载
print(f"文件解析类型: {type(load_dict)}") # <class 'dict'>
print(f"内容: {load_dict}") # {'one': 1, 'two': {'2.1': ['a', 'b']}}
两种等效实现方式:
# 方法1:dumps() + 手动写入
with open("format_json.json", "w") as f:
f.write(json.dumps(load_dict, indent=4, ensure_ascii=False))
# 方法2:直接使用dump()参数
with open("format_json.json", "w") as f:
json.dump(load_dict, f, indent=4, ensure_ascii=False)
关键参数:
indent=4:4空格缩进格式化ensure_ascii=False:支持非ASCII字符(如中文)
格式化后文件:
{
"one": 1,
"two": {
"2.1": [
"a",
"b"
]
}
}
基础转换
dumps/loads:内存对象 ↔ JSON字符串dump/load:文件 ↔ 内存对象
数据类型限制
JSON不支持Python特有类型(如日期/类对象),此时需用pickle。
最佳实践
# 写入推荐
json.dump(data, file, indent=2, ensure_ascii=False)
# 读取推荐
with open("data.json") as f:
data = json.load(f)
以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。
您可能感兴趣的文章:
- 全方位解析Python读写JSON数据的实战指南
- 使用python读写txt和json(jsonl)大文件的方法步骤
- Python Json读写操作之JsonPath用法详解
- Python如何读写JSON格式数据
- Python读写JSON文件的操作详解
- 详解python读写json文件