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

通过Python向自定义字段插入动态验收标准时出现内部服务器错误的问题排查

问题排查与解决方案

你的核心问题出在手动拼接JSON字符串时产生了多处语法错误,导致Jira API无法解析,返回模糊的内部服务器错误。我们一步步拆解问题并给出修复方案:

1. 手动拼接JSON的致命错误

先看你生成的strAcc内容,有几个明显的格式问题:

  • 多余的嵌套大括号:你生成的结构是[{ {..."}, {..."}, }],正确的数组结构应该直接包含对象:[{...}, {...}, {...}]
  • 字符串未加引号:比如"name":Create Testcases里的Create Testcases没有被双引号包裹,这是无效的JSON键值对
  • 对象末尾多余逗号:最后一个对象后面的逗号(,})会导致JSON解析失败
  • 布尔值类型不匹配:如果entry["MANDATORY"]是数据库返回的字符串"True"/"False",直接拼接会保留字符串类型,而非JSON要求的布尔值(虽然Jira可能兼容,但这是不规范的写法)

2. 正确的实现方式:用Python数据结构+JSON序列化

永远不要手动拼接JSON字符串,Python的json模块可以帮你完美处理格式问题,同时Jira Python库支持直接传递Python数据结构(会自动完成序列化)。

修正后的代码示例

import json

# 1. 从数据库加载数据后,构建Python列表(而非拼接字符串)
acc_list = []
cnt_id = 1
cnt_rank = 0

for entry in accDict:
    # 处理MANDATORY字段:如果是字符串则转为布尔值
    is_mandatory = entry["MANDATORY"] == "True" if isinstance(entry["MANDATORY"], str) else entry["MANDATORY"]
    
    acc_item = {
        "name": entry["NAME"],
        "checked": False,
        "Mandatory": is_mandatory,
        "option": False,
        "id": cnt_id,
        "rank": cnt_rank
    }
    acc_list.append(acc_item)
    cnt_id += 1
    cnt_rank += 1

# 2. 更新Jira问题:直接传递Python列表(Jira库会自动处理JSON序列化)
try:
    new_issue.update(fields={"customfield_11100": acc_list})
    print("验收标准更新成功!")
except Exception as e:
    print(f"更新失败:{str(e)}")

为什么手动拼接会失败?

你手动生成的字符串是无效JSON,Jira API解析时触发错误但只返回了模糊的"Internal server error";而你手动编写的字符串是正确的JSON格式,所以能正常运行——本质是手动拼接时犯了格式错误,手动编写时恰好避免了这些问题。

3. 额外注意事项

  • 确认customfield_11100的字段类型:如果该字段要求传递JSON字符串而非Python列表,可改用json.dumps(acc_list)生成标准JSON字符串后传递
  • 用print(json.dumps(acc_list, indent=2))打印出生成的JSON,和你手动编写的正确版本对比,确保格式完全一致
  • 检查数据库返回的字段值类型,避免字符串和布尔值、数字类型混淆

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 03:52:39