Python解析Musixmatch API JSON响应获取歌词遇阻求助
搞定Musixmatch API JSON解析问题
嘿,我来帮你解决这个解析难题!先看看你代码里的几个小问题,再给你靠谱的处理方案:
先修正代码里的明显错误
- 导入语句错误:
from os.path import json完全没必要,os.path模块里根本没有json,你已经单独import json了,把这行改成from os.path import dirname(如果后续用不到dirname,甚至可以直接删掉这行)。 - 变量名不匹配:你把API返回结果存在
lyrics里,但后面遍历用的是jsonLyric,这会直接触发NameError,得统一变量名。 - 遍历逻辑不对:Musixmatch的响应是固定层级结构,不需要多层嵌套循环,直接按层级访问就行。
修正后的完整代码示例
import json from musixmatch import Musixmatch # 替换成你的真实API密钥 musixmatch = Musixmatch("your_api_key_here") # 请求歌词数据 lyrics_response = musixmatch.matcher_lyrics_get('Grenade', 'Bruno Mars') # 可选:打印格式化后的响应,方便查看完整结构(内容多的话可以存到文件里看) # print(json.dumps(lyrics_response, indent=2)) # 逐层解析响应 message = lyrics_response.get('message') if message: # 先检查请求是否成功(状态码200是成功) header = message.get('header') if header.get('status_code') == 200: body = message.get('body') if body: # 拿到核心的歌词数据对象 lyrics_data = body.get('lyrics') if lyrics_data: # 提取歌词文本 print("=== 歌词内容 ===") print(lyrics_data.get('lyrics_body')) # 还能提取其他字段,比如版权信息 print("\n=== 版权信息 ===") print(lyrics_data.get('lyrics_copyright')) else: print(f"请求失败,状态码:{header.get('status_code')},错误信息:{header.get('hint')}") else: print("API返回格式异常,请检查请求参数")
为什么要这么写?
Musixmatch API的响应结构是固定的,核心层级是:响应字典 -> 'message' -> 'body' -> 'lyrics'lyrics对象里包含了你需要的所有歌词相关字段,比如lyrics_body(歌词文本)、lyrics_id、explicit等,直接按这个层级访问就好,不需要循环遍历。
如果还是遇到问题,你可以把完整的JSON响应贴出来,我帮你再精准排查~
内容的提问来源于stack exchange,提问作者Quinton Jackson




