使用Python的jq库过滤Spotify API JSON提取name字段遇类型错误求助
解决Python中jq模块调用报错:TypeError: 'module' object is not callable
我完全懂你遇到的坑了——你直接把jq模块当成函数来调用,这就是报错的核心原因!jq是一个Python模块本身,并不是可直接调用的对象,得用它提供的正确方法来编译和执行jq表达式才行。
下面是修正后的完整代码,帮你顺利从Spotify API响应中提取name字段并保存到文件:
步骤1:正确使用jq模块的编译方法
首先要通过jq.compile()来编译你的jq查询表达式,之后再对响应数据执行transform操作。这里分两种常见场景处理:
场景1:处理已解析的JSON对象(Python字典)
import requests import json import jq headers = { # 记得在这里填入你的Spotify API授权头,比如"Authorization": "Bearer YOUR_ACCESS_TOKEN" } # 请求Spotify API r = requests.get('https://api.spotify.com/v1/albums/70yMNdgyIj9SrQXFmdJKx9', headers=headers) r.raise_for_status() # 确保请求没有出错 # 把响应文本解析成Python字典 album_data = json.loads(r.text) # 编译jq表达式并提取name字段 compiled_jq = jq.compile('.name') album_name = compiled_jq.transform(album_data) # 保存结果到文件 with open('album_name.txt', 'w', encoding='utf-8') as f: f.write(album_name) print(f"提取的专辑名:{album_name},已成功保存到文件")
场景2:直接处理原始JSON文本(无需提前解析)
如果不想提前解析JSON,也可以直接用响应的原始文本,只需要在transform方法里加上text=True参数:
import requests import jq headers = { # 填入你的Spotify API授权头 } r = requests.get('https://api.spotify.com/v1/albums/70yMNdgyIj9SrQXFmdJKx9', headers=headers) r.raise_for_status() # 直接处理原始JSON文本 compiled_jq = jq.compile('.name') album_name = compiled_jq.transform(r.text, text=True) # 保存到文件 with open('album_name.txt', 'w', encoding='utf-8') as f: f.write(album_name)
额外小提示
你之前写的jq(".[name]")是错误写法,而且表达式也可以简化成.name,和.[name]的效果完全一致。
内容的提问来源于stack exchange,提问作者JasperK
相关产品推荐
相关产品推荐

