抖音弹幕游戏开发之第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 小时前
Python 内存手术刀:sys.getrefcount 与引用计数的生死时速
后端·python
明月_清风2 小时前
Python 消失的内存:为什么 list=[] 是新手最容易踩的“毒苹果”?
后端·python
Flittly17 小时前
【从零手写 ClaudeCode:learn-claude-code 项目实战笔记】(3)TodoWrite (待办写入)
python·agent
千寻girling21 小时前
一份不可多得的 《 Django 》 零基础入门教程
后端·python·面试
databook1 天前
探索视觉的边界:用 Manim 重现有趣的知觉错觉
python·动效
明月_清风1 天前
Python 性能微观世界:列表推导式 vs for 循环
后端·python
明月_清风1 天前
Python 性能翻身仗:从 O(n) 到 O(1) 的工程实践
后端·python
JaguarJack1 天前
FrankenPHP 原生支持 Windows 了
后端·php·服务端
BingoGo1 天前
FrankenPHP 原生支持 Windows 了
后端·php
helloweilei2 天前
python 抽象基类
python