Python动态检查Jira对象路径失败及序列化问题求助
Jira Issue对象遍历与序列化问题解析
能不能动态遍历Jira对象路径并对比工单字段?
完全可以,但得先搞清楚Jira Issue对象的底层结构,不能用处理普通字典的方式直接操作。
为什么get()方法用不了?
Jira库返回的Issue对象不是标准Python字典,而是一个自定义类的实例。get()是字典类型的专属方法,类实例本身没有这个方法,直接调用自然会报错。
转字典/JSON时报错的原因
- "'Issue'对象不可迭代":Python要把对象转成字典(比如
dict(issue))时,会尝试迭代对象的属性,但Issue类没有实现__iter__魔法方法,Python不知道该遍历哪些内容,所以抛出不可迭代的错误。 - 无法序列化到JSON:JSON只能序列化原生数据类型(字符串、数字、列表、字典等),而
Issue对象里包含大量自定义类实例(比如User对象、datetime时间对象、Status状态对象等),这些对象默认的JSON编码器无法识别,直接序列化就会失败。
解决思路
要操作Issue对象的字段,推荐用库自带的raw属性,它会返回工单对应的原生字典结构:
from jira import JIRA jira = JIRA(server="your_server_url", basic_auth=("user", "pass")) issue = jira.issue("PROJ-123") issue_dict = issue.raw # 这里拿到标准字典
拿到字典后,你就可以用get()方法获取路径值,也能正常序列化为JSON,还能轻松对比两个工单的字段差异:
def compare_issues(issue1_raw, issue2_raw, path=""): for key in set(issue1_raw.keys()).union(issue2_raw.keys()): current_path = f"{path}.{key}" if path else key val1 = issue1_raw.get(key) val2 = issue2_raw.get(key) if val1 != val2: print(f"差异字段: {current_path}") print(f"工单1值: {val1}") print(f"工单2值: {val2}") print("---") # 示例调用 issue1 = jira.issue("PROJ-123") issue2 = jira.issue("PROJ-456") compare_issues(issue1.raw, issue2.raw)
内容的提问来源于stack exchange,提问作者Mr. E
相关产品推荐
相关产品推荐

