调用mvg-api出现JSONDecodeError的解决方法及替代API咨询
解决mvg_api调用JSONDecodeError问题及替代方案
问题重现
代码示例:
import mvg_api station_id = mvg_api.get_id_for_station("Hauptbahnhof") print(station_id)
触发的错误栈:
Traceback (most recent call last): File "/Users/"name"/PycharmProjects/MVG/venv/lib/python3.9/site-packages/requests/models.py", line 971, in json return complexjson.loads(self.text, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/json/__init__.py", line 346, in loads return _default_decoder.decode(s) File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/json/decoder.py", line 337, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/json/decoder.py", line 355, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Users/"name"/PycharmProjects/MVG/main.py", line 2, in <module> station_id=mvg_api.get_id_for_station("Hauptbahnhof") File "/Users/name/PycharmProjects/MVG/venv/lib/python3.9/site-packages/mvg_api/__init__.py", line 148, in get_id_for_station station = get_stations(station_name)[0] File "/Users/name/PycharmProjects/MVG/venv/lib/python3.9/site-packages/mvg_api/__init__.py", line 202, in get_stations results = get_locations(station) File "/Users/name/PycharmProjects/MVG/venv/lib/python3.9/site-packages/mvg_api/__init__.py", line 194, in get_locations results = _perform_api_request(url) File "/Users/name/PycharmProjects/MVG/venv/lib/python3.9/site-packages/mvg_api/__init__.py", line 67, in _perform_api_request return resp.json() File "/Users/name/PycharmProjects/MVG/venv/lib/python3.9/site-packages/requests/models.py", line 975, in json raise RequestsJSONDecodeError(e.msg, e.doc, e.pos) requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
错误原因分析
这个错误说明API返回的内容不是有效的JSON格式,甚至可能是空响应。常见原因包括:
- mvg_api库依赖的MVG API端点已失效:第三方库可能没跟上官方API的更新,导致请求返回404/403错误页面(HTML格式)而非JSON。
- 请求头缺失:官方API可能要求特定的User-Agent或身份验证信息,旧版本库未添加这些头,导致被拦截。
- 网络问题:请求未成功到达服务器,返回空内容。
解决方法
更新mvg_api库
先尝试升级到最新版本,可能开发者已修复API端点问题:pip install --upgrade mvg_api调试API响应内容
自己写测试请求,打印响应状态码和原始内容,确认问题:import requests def test_mvg_api(): url = "https://www.mvg.de/api/fahrinfo/location/queryWeb?q=Hauptbahnhof" resp = requests.get(url, headers={"User-Agent": "Mozilla/5.0"}) print("Status Code:", resp.status_code) print("Response Text:", resp.text) test_mvg_api()如果返回403/404,说明API端点已变更;如果返回HTML,需调整请求头(比如添加模拟浏览器的User-Agent)。
直接调用官方MVG API
如果第三方库失效,直接对接官方API。官方MVG开放API需要注册获取密钥,支持站点查询、实时班次等功能,请求时需携带正确的请求头和API密钥。
替代API推荐
- MVG官方开放API:慕尼黑交通局官方提供,数据最准确,支持站点信息、实时班次、路线规划等,需注册获取访问权限。
- OpenTripPlanner:开源公共交通规划工具,支持慕尼黑地铁数据,可获取站点、路线、实时信息,基础功能无需密钥。
- Transitland:聚合全球公共交通数据的平台,包含慕尼黑地铁的静态和实时数据,适合多城市交通项目。
内容的提问来源于stack exchange,提问作者Ethan_brahmawar
相关产品推荐
相关产品推荐

