This commit is contained in:
ddrwode
2026-01-15 17:24:43 +08:00
parent 7a2adecca9
commit 1e85ae8353
2 changed files with 391 additions and 15 deletions

View File

@@ -340,43 +340,63 @@ def parse_approvers(approvers):
approvers: 审核人列表,可以是:
- 数组格式ID列表推荐[1, 2, 3] 或 ["1", "2", "3"]
- 数组格式(用户名列表,兼容):["张三", "李四", "王五"]
- JSON字符串格式ID列表"[1,2,3]"'"[1,2,3]"'
- JSON字符串格式ID列表"[1,2,3]" "[5]" '"[1,2,3]"'
- JSON字符串格式带空格"[ 5 ]""[1, 2, 3]"
- JSON字符串格式用户名列表兼容'["张三","李四","王五"]'
- 字符串格式逗号分隔的ID"1,2,3"
- 字符串格式逗号分隔的ID"1,2,3""5"
- 字符串格式(逗号分隔的用户名,兼容):"张三,李四,王五"
- None: 返回空列表
Returns:
list: 审核人用户名列表,如 ["张三", "李四", "王五"]
"""
import json
if not approvers:
return []
approvers_list = []
if isinstance(approvers, str):
# 尝试解析 JSON 字符串格式(如 "[1,2,3]" 或 '"[1,2,3]"'
# 去除首尾空格
approvers = approvers.strip()
# 如果字符串为空,返回空列表
if not approvers:
return []
# 尝试解析 JSON 字符串格式(如 "[1,2,3]" 或 "[5]" 或 '"[1,2,3]"'
try:
import json
# 先尝试直接解析 JSON
parsed = json.loads(approvers)
if isinstance(parsed, list):
approvers_list = [str(a).strip() for a in parsed if a]
else:
# 如果不是数组,可能是被双重编码的字符串,再解析一次
if isinstance(parsed, str):
try:
parsed2 = json.loads(parsed)
if isinstance(parsed2, list):
approvers_list = [str(a).strip() for a in parsed2 if a]
except:
pass
approvers_list = [str(a).strip() for a in parsed if a is not None and str(a).strip()]
elif isinstance(parsed, str):
# 如果是字符串,可能是被双重编码的JSON字符串,再解析一次
# 例如:'"[5]"' -> "[5]" -> [5]
try:
parsed2 = json.loads(parsed)
if isinstance(parsed2, list):
approvers_list = [str(a).strip() for a in parsed2 if a is not None and str(a).strip()]
elif isinstance(parsed2, (int, str)):
# 单个值,转换为列表
approvers_list = [str(parsed2).strip()]
except (json.JSONDecodeError, ValueError, TypeError):
# 双重解析失败,可能是普通字符串,按逗号分隔处理
approvers_list = [parsed.strip()] if parsed.strip() else []
elif isinstance(parsed, (int, str)):
# 单个值(数字或字符串),转换为列表
approvers_list = [str(parsed).strip()]
except (json.JSONDecodeError, ValueError, TypeError):
# JSON 解析失败,尝试按逗号分隔处理
# 例如:"1,2,3" 或 "5" 或 "张三,李四"
approvers_list = [a.strip() for a in approvers.split(',') if a.strip()]
elif isinstance(approvers, list):
# 数组格式(推荐)
approvers_list = [str(a).strip() for a in approvers if a]
approvers_list = [str(a).strip() for a in approvers if a is not None and str(a).strip()]
elif isinstance(approvers, (int, float)):
# 单个数字,转换为列表
approvers_list = [str(int(approvers))]
else:
return []