抖音弹幕游戏开发之第6集:解析JSON数据·优雅草云桧·卓伊凡

《抖音弹幕游戏开发专栏》是优雅草建立的专栏,由优雅草资深开发工程师云桂提供实战教学配对发布有对应的视频教程,以下内容为技术文稿,卓伊凡辅助。
抖音弹幕游戏开发之第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方法安全提取字段
  • ✅ 根据消息类型显示不同信息
  • ✅ 添加异常处理

下一集:识别不同类型的消息

相关推荐
优橙教育2 小时前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
想会飞的蒲公英3 小时前
计算机怎样读取中文文本:编码、清洗与标准化
人工智能·python·自然语言处理
SeaTunnel4 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
深度研习笔记4 小时前
OpenCV工业视觉实战09|项目EXE打包+工控机无环境部署+后台常驻运行,彻底脱离Python环境,完成项目最终交付
python·opencv·webpack
碎光拾影4 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
CCPC不拿奖不改名4 小时前
大模型推理架构与开源生态知识整理
数据库·windows·python·架构·langchain·开源·github
Marst Code5 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
databook5 小时前
当散点图不够用时:用 t-SNE 可视化多维数据
python·数据分析·数据可视化
Miao121315 小时前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言
CRMEB系统商城6 小时前
开源自建还是SaaS订阅?算一笔3年经济账
java·大数据·开发语言·开源