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

Python调用edination接口报JSONDecodeError及对接KNIME问题咨询

问题原因

json.decoder.JSONDecodeError 触发的核心逻辑是:执行r.json()时,HTTP响应的正文不是合法JSON格式。结合你的代码,具体问题点如下:

  • 鉴权头未传入请求:你提前定义了存订阅密钥的headers变量,但调用requests.post()时没有传入headers参数,接口无法识别你的访问权限,会直接返回401类错误的纯文本/HTML错误页,自然无法按JSON解析。
  • 冗余错误导入:开头from importlib.metadata import files属于完全无用的导入代码,虽然你后续对files变量重新赋值没有直接引发变量冲突,但属于无意义的冗余内容。
  • 缺少响应状态校验:代码没有先判断接口请求是否成功,不管返回200正常响应还是4xx/5xx错误,都直接调用r.json(),只要接口返回非JSON内容就会触发报错。
  • 文件资源未做回收处理:直接打开本地文件上传没有做上下文管理,程序运行过程中可能出现文件句柄泄漏的问题。
修正后可运行代码
import requests
import json

url = 'https://api.edination.com/v2/edifact/read'
headers = {
    'Ocp-Apim-Subscription-Key': '3ecf6b1c5cf34bd797a5f4c57951a1cf',
    'Accept': 'application/json'
}
file_path = 'C:\\Users\\hcharafeddine\\Desktop\\EDI\\Interchange_1654767219416.edi'

# 用上下文管理器自动处理文件关闭
with open(file_path, 'rb') as f:
    files = {'file': f}
    r = requests.post(url, headers=headers, files=files)

# 先校验请求状态,非200状态直接打印错误信息方便排查
if r.status_code != 200:
    print(f"接口请求失败,状态码:{r.status_code},响应内容:{r.text}")
else:
    # 确认响应成功后再解析JSON
    edi_parse_result = r.json()
    # 把结果存为本地JSON文件,方便后续传入KNIME工作流
    with open('edi_parse_result.json', 'w', encoding='utf-8') as out_f:
        json.dump(edi_parse_result, out_f, ensure_ascii=False, indent=2)
    print("EDIFACT解析完成,结果已存入edi_parse_result.json")
KNIME对接说明

拿到解析后的JSON结果后,可选择两种方式传入KNIME工作流:

  • 直接用KNIME的File Reader节点读取上面代码生成的edi_parse_result.json本地文件,后续接JSON处理节点做数据转换即可。
  • 如果不想落地本地文件,可以把Python脚本封装为KNIME的Python Script节点,直接把解析得到的JSON字典转成KNIME支持的表结构数据流,在工作流内部直接传递,不用做文件中转。

注意:如果修正后仍然请求失败,可以先打印r.text查看接口返回的具体错误提示,常见问题包括订阅密钥失效、EDI文件格式不符合规范、接口调用配额耗尽等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:24:16