如何在Python中正确解析JSONP格式响应?

JSONP 不是合法的JSON格式,它本质是一段JavaScript函数调用代码,结构固定为自定义回调函数名(实际JSON数据),所以直接调用json.loads()必然解析失败。
通用解析方法(无第三方依赖,最安全)
直接用正则提取括号包裹的核心JSON内容,再交给json.loads()解析即可,不需要提前知道回调函数名,兼容绝大多数场景:
import re import json def parse_jsonp(jsonp_text: str): # 匹配规则:忽略前后空白、末尾分号,提取括号内的所有内容(支持JSON带换行) match_result = re.search( r'^\s*[\w$]+\s*\((.*)\)\s*;?\s*$', jsonp_text, flags=re.DOTALL ) if not match_result: raise ValueError("输入内容不是合法的JSONP格式") return json.loads(match_result.group(1)) # 调用示例 jsonp_content = 'jQuery112400123({"code":0,"msg":"success","data":{"id":1,"name":"test"}})' parsed_data = parse_jsonp(jsonp_content) print(parsed_data["data"]["name"]) # 输出 test
注意事项
- 该方法不需要执行JavaScript代码,不存在代码注入风险,适合处理来源不可信的接口响应
- 如果是用
requests等库请求接口,直接把响应文本传入上述函数即可,不需要额外处理编码 - 不要直接用
eval()执行JSONP内容解析,恶意接口返回的JS代码可能直接在本地执行带来安全风险
内容的提问来源于stack exchange,提问作者MUHAMMAD SHAHID RAFI C P
相关产品推荐
相关产品推荐

