《抖音弹幕游戏开发专栏》是优雅草建立的专栏,由优雅草资深开发工程师云桂提供实战教学配对发布有对应的视频教程,以下内容为技术文稿,卓伊凡辅助。
抖音弹幕游戏开发之第6集:解析JSON数据·优雅草云桧·卓伊凡
第6集:解析JSON数据
什么是JSON
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,几乎所有编程语言都支持。
{
"name": "张三",
"age": 25,
"city": "北京"
}
在Python中,JSON格式和字典(dict)非常相似。
导入json库
import json # Python内置,无需安装
解析JSON数据
修改 on_message 函数:
def on_message(ws, message):
try:
data = json.loads(message)
print(f"解析后的数据: {data}")
except json.JSONDecodeError as e:
print(f"数据解析失败: {e}")
关键点
json.loads(message)- 把JSON字符串转换成Python字典try-except- 异常处理,解析失败不会崩溃
提取关键字段
使用 get() 方法安全地提取字段:
def on_message(ws, message):
try:
data = json.loads(message)
msg_type = data.get('msgType', '')
name = data.get('name', '')
print(f"消息类型: {msg_type}, 用户: {name}")
except json.JSONDecodeError as e:
print(f"数据解析失败: {e}")
为什么用get()而不是data['msgType']?
get()更安全,字段不存在时返回默认值data['key']字段不存在会抛出 KeyError 异常
根据消息类型显示不同信息
def on_message(ws, message):
try:
data = json.loads(message)
msg_type = data.get('msgType', '')
name = data.get('name', '')
if msg_type == '弹幕':
content = data.get('content', '')
print(f"[弹幕] {name}: {content}")
elif msg_type == '礼物':
gift_name = data.get('giftName', '')
gift_count = data.get('giftCount', 0)
print(f"[礼物] {name} 送了 {gift_count} 个 {gift_name}")
else:
print(f"[{msg_type}] {name}")
except json.JSONDecodeError as e:
print(f"数据解析失败: {e}")
输出效果
[弹幕] 张三: 主播好厉害!
[礼物] 李四 送了 1 个 玫瑰花
[点赞] 王五
[弹幕] 赵六: 666
常见问题
|-------------------------|---------------------|
| 问题 | 答案 |
| 为什么用try-except? | 网络数据可能不完整或格式错误 |
| json.loads和json.load区别? | loads解析字符串,load解析文件 |
| 想提取更多字段? | 查看接口文档,用get方法提取 |
本集总结
- ✅ 学习JSON格式基础知识
- ✅ 使用json.loads解析JSON数据
- ✅ 用get方法安全提取字段
- ✅ 根据消息类型显示不同信息
- ✅ 添加异常处理
下一集:识别不同类型的消息