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

请求协助解决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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:34:54