请求协助解决DOORS Next项目属性查询的JSONDecoderError问题
解决DOORS Next项目属性获取的JSONDecoderError问题
错误根源
你的代码存在两个关键问题:
- 请求头
Accept设为application/rdf+xml,接口返回XML格式数据,却调用response.json()解析成JSON,直接触发JSONDecoderError - 代码导入了
urllib3但未导入requests库,运行时会先报导入错误
修正方案
1. 调整请求头为JSON格式
DOORS Next的OSLC接口支持返回JSON,将Accept头改为application/json,即可直接用JSON解析响应。
2. 修正接口路径
原auth_url是占位符,需替换为获取指定项目属性的真实接口,DOORS Next的OSLC项目属性接口通常格式为:{base_url}oslc_rm/projects/{项目ID}/attributes
3. 补全依赖库导入
修正后的代码
import urllib3 import requests # 补全requests导入 urllib3.disable_warnings() # 设置连接参数 base_url = 'https://example.com/rm/' # 替换为真实路径,{项目ID}需换成目标项目的实际ID project_attr_url = base_url + 'oslc_rm/projects/{项目ID}/attributes' # 调整Accept头为JSON格式 headers = { 'OSLC-Core-Version': '2.0', 'Accept': 'application/json' } # 获取属性通常用GET请求,而非POST response = requests.get(project_attr_url, headers=headers, verify=False) response.encoding = 'utf-8' print(f"Response status code: {response.status_code}") if response.status_code == 200: print("成功获取项目属性!") project_info = response.json() # OSLC接口返回的属性列表通常在'member'字段,可根据实际返回结构调整 attributes = project_info.get('member', []) # 遍历打印属性标题 for attribute in attributes: print(attribute.get('dc:title')) else: print(f"获取项目属性失败,状态码: {response.status_code}") print(f"响应内容: {response.text}") # 打印响应内容便于排查问题
特殊场景处理(需XML响应时)
如果必须使用XML格式响应,保留application/rdf+xml的Accept头,改用XML解析库处理:
import xml.etree.ElementTree as ET # 请求代码不变,替换解析逻辑 if response.status_code == 200: print("成功获取项目属性!") root = ET.fromstring(response.text) # 按RDF XML的命名空间提取属性标题,需匹配实际命名空间 namespace = {'dc': 'http://purl.org/dc/elements/1.1/'} for title in root.findall('.//dc:title', namespace): print(title.text)
内容的提问来源于stack exchange,提问作者root
相关产品推荐
相关产品推荐

