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

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

相关推荐
专注仿真3 分钟前
ThinkPHP6 API接口开发实例:从零搭建RESTful风格接口
后端·php·restful
CoderYanger19 分钟前
Java EE 进阶:4.Spring Web MVC 入门(第一弹)
java·开发语言·前端·spring·面试·java-ee·mvc
估值探索者33 分钟前
【Python量化选股流水线 #04】选股器好不好用?「昨日候选→今日表现」回看验收
开发语言·python·股票数据·股票数据api接口
田里的水稻1 小时前
PyTorch_Dataloader\TensorBoard---数据加载与可视化
人工智能·pytorch·python·神经网络·机器学习
Dmz丶1 小时前
前端转 AI 100 天 Day 27:Docker 容器化——从“我电脑能跑“到“到处能跑“
python
卿卿的产品经理日记1 小时前
【AI产品经理实战】Day 38|try-except 踩坑实录:报错是数据
人工智能·笔记·python·学习·产品经理
全栈练习生1 小时前
文档智能与实践
python·ai
爱喝热水的呀哈喽2 小时前
HEJIAN RESEARCH
开发语言·matlab
白露与泡影2 小时前
后端 Java 面试核心八股汇总|高频面试题 + 解析,覆盖基础到进阶
java·开发语言·面试
xifangge20252 小时前
基于 JavaScript 实现 CNC 数控切削参数与螺纹公差纯前端核算引擎
开发语言·前端·javascript