ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Python 中的 JSON:跨语言、跨平台的通用数据交换格式

Python 中的 JSON:跨语言、跨平台的通用数据交换格式 一、引言为什么需要 JSON写程序时我们经常要保存数据、传递数据、对接接口。但现实是你的程序用Python写的对方的服务可能是Java、JavaScript、C写的数据要存到文件里下次再读出来数据要发给另一个平台App、网页、服务器每种语言都有自己的对象/数组/结构体没法直接互相认识。于是需要一个“通用语言”来当翻译——这个通用语言就是JSON。一句话理解JSON 就是用来在“不同语言、不同平台”之间传递数据的一种通用字符串格式。二、为什么说 JSON “通用”特性说明跨语言Python、Java、JavaScript、Go、C 等几乎所有主流语言都有 JSON 解析库跨平台网页、安卓、iOS、服务器、单片机都能处理 JSON字符串格式JSON 本质是一段文本字符串不依赖任何特定程序肉眼可读、便于存储和传输易解析数据是“键值对”结构天然对应各语言的字典/对象/Map所以只要把数据转成 JSON 字符串任何一端都能“看懂”。三、JSON 长什么样JSON 由两类结构组成1. 对象对应 Python 的字典{ 姓名: 张三, 年龄: 18, 是否会员: true }2. 数组对应 Python 的列表[后羿, 鲁班, 狄仁杰]JSON 支持的数据类型JSON 类型对应 Python示例字符串 stringstrhello数字 numberint / float18、3.14布尔 booleanbooltrue/false空值 nullNonenull对象 objectdict{a: 1}数组 arraylist[1, 2, 3]注意JSON 里的true/false/null是小写Python 里是True/False/None。四、Python 怎么操作 JSONPython 内置了json模块核心就两个函数函数作用json.dumps()把 Python 数据 → JSON 字符串序列化 / 编码json.loads()把 JSON 字符串 → Python 数据反序列化 / 解码4.1 字典 → JSON 字符串dumpsimport json data {姓名: 张三, 年龄: 18, 是否会员: True} dumps 把字典变成 JSON 字符串 json_str json.dumps(data, ensure_asciiFalse, indent2) print(json_str) print(type(json_str)) # class str本质是字符串4.2 JSON 字符串 → 字典loadsimport json json_str {姓名: 张三, 年龄: 18, 是否会员: true} loads 把 JSON 字符串变成 Python 字典 data json.loads(json_str) print(data[姓名]) # 张三 print(type(data)) # class dict又变回字典了4.3 dumps 常用参数json.dumps(data, ensure_asciiFalse, # 保证中文不乱码不转成 \uXXXX indent2, # 缩进格式化打印好看 sort_keysTrue) # 按键名排序五、JSON 与文件读写实战重点结合你笔记里的文件操作JSON 最常见的用法就是把数据保存到文件 / 从文件读数据。5.1 把数据写入 JSON 文件import json members [ {姓名: 张三, 年龄: 18, 分数: 9500}, {姓名: 李四, 年龄: 20, 分数: 8200}, ] 用 with open 写文件json.dump 直接写进文件注意是 dump 不是 dumps with open(./members.json, w, encodingutf-8) as f: json.dump(members, f, ensure_asciiFalse, indent2) print(写入完成)5.2 从 JSON 文件读取数据import json with open(./members.json, r, encodingutf-8) as f: data json.load(f) # 注意是 load 不是 loads print(data) print(type(data)) # class list区分记忆带s的dumps/loads操作的是字符串不带s的dump/load操作的是文件对象记忆口诀“s” string字符串六、完整实战会员数据 JSON 文件持久化把之前会员管理系统的思路升级成“数据能存盘、能读回”的版本import json FILE ./members.json def load_members(): 从 JSON 文件读取会员列表文件不存在则返回空列表 try: with open(FILE, r, encodingutf-8) as f: return json.load(f) except FileNotFoundError: return [] def save_members(members): 把会员列表保存到 JSON 文件 with open(FILE, w, encodingutf-8) as f: json.dump(members, f, ensure_asciiFalse, indent2) def add_member(members, name, age, score): 添加会员 members.append({编号: len(members) 1, 姓名: name, 年龄: age, 分数: score}) save_members(members) def find_member(members, name): 按姓名查找会员 for m in members: if m[姓名] name: return m return None ---- 使用 ---- members load_members() add_member(members, 张三, 18, 9500) add_member(members, 李四, 20, 8200) print(find_member(members, 张三))运行后members.json文件内容如下[ { 编号: 1, 姓名: 张三, 年龄: 18, 分数: 9500 }, { 编号: 2, 姓名: 李四, 年龄: 20, 分数: 8200 } ]这样即使程序关闭数据也永久保存在文件里下次启动能重新读回来——这就是“数据持久化”。七、常见坑与技巧问题原因解决办法中文变成\u5f20\u4e09默认ensure_asciiTrue加ensure_asciiFalse写文件报错文件编码和读写编码不一致统一用encodingutf-8json.load报错文件里不是合法 JSON先json.loads检查字符串或加异常处理用dump想传字符串参数用错字符串用dumps文件用dumpJSON 文件找不到文件夹不存在 / 路径错相对路径./xxx.json确保目录存在
返回列表