
json是 Python 标准库中用于处理 JSON 数据的模块。JSONJavaScript Object Notation是一种轻量级的数据交换格式广泛用于 Web API、配置文件等场景。json模块的核心功能是在 Python 对象和 JSON 字符串之间互相转换。一、序列化与反序列化操作说明方法序列化Python 对象 → JSON 字符串dumps()/dump()反序列化JSON 字符串 → Python 对象loads()/load()说明带s的dumps/loads→ 操作字符串string不带s的dump/load→ 操作文件file二、Python 与 JSON 的类型映射Python 类型JSON 类型dictobjectlist/tuplearraystrstringint/floatnumberTrue/Falsetrue/falseNonenull注意Python 的tuple会被序列化为 JSON 的array但反序列化时变回listJSON 的number反序列化时整数变int小数变float三、json.dumps()Python 对象 → JSON 字符串1. 基本用法import json data { name: Alice, age: 25, is_active: True, hobbies: [reading, swimming], address: None } json_str json.dumps(data) print(json_str) # {name: Alice, age: 25, is_active: true, hobbies: [reading, swimming], address: null} print(type(json_str)) # class str2. 常用参数参数说明示例indent缩进空格数美化输出indent2ensure_ascii是否转义非 ASCII 字符ensure_asciiFalse保留中文sort_keys按键排序sort_keysTrueseparators自定义分隔符separators(,, :)default处理不可序列化对象defaultstrdata {name: 张三, age: 25} # 美化输出 保留中文 print(json.dumps(data, indent2, ensure_asciiFalse)) # { # name: 张三, # age: 25 # } # 按 key 排序 print(json.dumps(data, sort_keysTrue)) # {age: 25, name: 张三} # 紧凑输出默认分隔符是 , 和 : print(json.dumps(data, separators(,, :))) # {name:张三,age:25}3. 处理不可序列化对象json.dumps()默认只能序列化基本类型。遇到datetime、自定义对象时会报错需要用default指定转换函数。from datetime import datetime data {time: datetime.now()} # 报错Object of type datetime is not JSON serializable # json.dumps(data) # 用 default 指定转换函数 json_str json.dumps(data, defaultstr) print(json_str) # {time: 2024-01-01 12:00:00} # 自定义转换函数 def custom_converter(obj): if isinstance(obj, datetime): return obj.isoformat() raise TypeError(fObject of type {type(obj)} is not JSON serializable) json_str json.dumps(data, defaultcustom_converter)四、json.loads()JSON 字符串 → Python 对象import json json_str {name: Alice, age: 25, hobbies: [reading]} data json.loads(json_str) print(data) # {name: Alice, age: 25, hobbies: [reading]} print(type(data)) # class dict print(data[name]) # Alice常用参数参数说明object_hook自定义字典的反序列化处理parse_float自定义浮点数解析parse_int自定义整数解析# 自定义整数解析 data json.loads({age: 25}, parse_intlambda x: int(x) * 2) print(data) # {age: 50}五、json.dump()写入文件dump()直接把 Python 对象写入文件不用手动write()。import json data { name: Alice, age: 25, hobbies: [reading, swimming] } # 写入文件 with open(data.json, w, encodingutf-8) as f: json.dump(data, f, indent2, ensure_asciiFalse)参数说明参数说明fp文件对象必须支持write()indent缩进ensure_ascii是否保留中文sort_keys按键排序default不可序列化对象的处理注意dump()的第一个参数是对象第二个参数才是文件。六、json.load()从文件读取import json # 从文件读取 with open(data.json, r, encodingutf-8) as f: data json.load(f) print(data[name]) # Alice print(type(data)) # class dict注意load()只接受文件对象不接受字符串。# 正确传文件对象 data json.load(f) # 错误传字符串会报错 # data json.load({name: Alice}) # 字符串用 loads data json.loads({name: Alice})方法对比方法方向数据源/目标返回值dumps()Python → JSON对象 →字符串strloads()JSON → Python字符串→ 对象dict/listdump()Python → JSON对象 →文件Noneload()JSON → Python文件→ 对象dict/list