抖音弹幕游戏开发之第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方法安全提取字段
  • ✅ 根据消息类型显示不同信息
  • ✅ 添加异常处理

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

相关推荐
16月6日-晴5 小时前
Java面向对象——接口
java·开发语言
wuyk5555 小时前
107.FreeRTOS 链表深度解析:从原理到面试满分答案
c语言·开发语言·数据结构·stm32·单片机·链表·面试
geovindu5 小时前
CSharp: Wordcloud
开发语言·后端·c#·.net·.netcore·词云
智购科技自动售卖机厂家5 小时前
2026自动售货机库存热力图分析:从设备分布到补货优先级的数据可视化实践~YH
大数据·python·信息可视化
Java小白笔记5 小时前
Java 实现 ZIP 压缩包生成方案
java·开发语言·网络·7-zip
Persistent的粽子!5 小时前
C++:类与对象(一)
开发语言·c++·经验分享·笔记
鹿鹿学长6 小时前
微软把语音转写打到 0.1 美元/小时:5 个月降价 72%,AI 音频进入地板价时代
python·自动化
weixin_440730506 小时前
使用pytest中方法控制执行步骤(test_begin.py、test_end.py,@pytest.mark.run(order=1))
开发语言·python·pytest
小柯南敲键盘6 小时前
跨境电商批量图片翻译与视频字幕翻译,就用跨马AI工具
大数据·人工智能·python·音视频
geovindu6 小时前
CSharp: Command Pattern
开发语言·后端·c#·.net·.netcore·命令模式·行为模式