You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Dukascopy API提取JSON时出现JSONDecodeError报错如何解决?

问题原因
  • 你调用的接口返回的是JSONP格式的数据,而非标准JSON格式。从你提供的请求URL可以看到尾部带有jsonp=_callbacks____1kvynkpid参数,JSONP的返回结构是回调函数名包裹JSON内容,格式类似_callbacks____1kvynkpid({"key": "value"}),不是纯JSON字符串,所以直接调用r.json()会从第一行第一列就无法识别JSON结构,触发对应报错。
解决方法

方案1:移除JSONP参数(优先推荐)

大多数支持JSONP的接口如果不传jsonp参数,会直接返回标准JSON。你可以先把URL尾部的&jsonp=_callbacks____1kvynkpid参数删除后再发起请求,即可直接解析JSON。
修改后的代码示例:

import requests
import pandas as pd

# 移除jsonp参数后的请求URL
Request_URL = "https://freeserv.dukascopy.com/2.0/api/group=quotes&method=realtimeSentimentIndex&enabled=true&key=bsq3l3p5lc8w4s0c&type=swfx"
r = requests.get(Request_URL)
df = pd.DataFrame(r.json())

方案2:处理JSONP返回内容

如果接口必须要求传jsonp参数,你可以手动提取返回内容中被包裹的JSON部分再解析:
修改后的代码示例:

import json
import requests
import pandas as pd

Request_URL = "https://freeserv.dukascopy.com/2.0/api/group=quotes&method=realtimeSentimentIndex&enabled=true&key=bsq3l3p5lc8w4s0c&type=swfx&jsonp=_callbacks____1kvynkpid"
r = requests.get(Request_URL)
# 提取JSONP括号内的纯JSON内容
jsonp_content = r.text
# 找到第一个左括号和最后一个右括号的位置,截取中间内容
json_str = jsonp_content[jsonp_content.find('(')+1 : jsonp_content.rfind(')')]
# 解析JSON
data = json.loads(json_str)
df = pd.DataFrame(data)

内容的提问来源于stack exchange,提问作者Bayrem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:54:02