Python requests遇JSONDecodeError:含斜杠SKU参数路径拆分问题
问题原因
你遇到的JSONDecodeError本质是URL路径中的特殊字符未做编码处理:
当sku值RFBB5-56C40K2/32直接拼接到URL后,其中的/会被HTTP服务器识别为路径分隔符,导致实际请求的URL路径被解析为/xxx/items/RFBB5-56C40K2/32——服务器会把32当作新的子路径,而非sku的一部分。这种情况下服务器返回的不是预期的JSON数据(大概率是404错误页面或非JSON格式的错误响应),所以调用.json()时会触发解码失败。
解决方法
核心思路是对包含特殊字符的sku进行URL编码,把/这类特殊字符转换为URL安全的编码格式(比如/会被转成%2F),让服务器将整个sku识别为单个路径段。
方法1:使用urllib.parse.quote编码路径参数
修改代码如下:
import requests import json from urllib.parse import quote with open('C:/asg/ftpfiles/data.json') as json_file: dataparse = json.load(json_file) iPartNumber = dataparse['distributornumsku'] # 对sku进行URL编码,处理特殊字符 encoded_sku = quote(iPartNumber) # 用编码后的sku拼接URL r = requests.get(f'https://online.xxx.com/xxx/items/{encoded_sku}', auth=('test@test.com', 'test')) # 先检查响应状态码,避免直接解码失败 if r.status_code == 200: response_data = r.json() with open('itemdatasku.json', 'w') as json_file: json.dump(response_data, json_file) else: print(f"请求失败,状态码: {r.status_code},响应内容: {r.text}")
额外排查建议
以后遇到类似JSON解码错误时,建议先跳过.json()调用,先打印响应的状态码和原始内容,确认服务器返回的是否是合法JSON,这能快速定位是请求路径错误还是服务器返回异常。
内容的提问来源于stack exchange,提问作者alex1290
相关产品推荐
相关产品推荐

