haha
This commit is contained in:
@@ -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 []
|
||||
|
||||
|
||||
Reference in New Issue
Block a user