diff --git a/backend/ai_services/views.py b/backend/ai_services/views.py index 695d593..87ccae6 100644 --- a/backend/ai_services/views.py +++ b/backend/ai_services/views.py @@ -239,20 +239,23 @@ class TranscriptionTaskViewSet(viewsets.ModelViewSet): if isinstance(transcription_data, dict): # 确定包含实际内容的字典源 - # 下载的 JSON 可能结构为 {"TaskId": "...", "Transcription": { "Sentences": [...] }} - # 或者 {"Sentences": [...]} content_source = transcription_data - # 如果存在嵌套的 Transcription 键,且它是字典,则优先使用它 - if 'Transcription' in transcription_data and isinstance(transcription_data['Transcription'], dict): - content_source = transcription_data['Transcription'] - logger.info(f"Using nested Transcription dict, keys: {content_source.keys()}") + # 关键修复: + # 阿里云返回的 JSON 可能是 {"Transcription": {"Sentences": ...}} 也可能是 {"Sentences": ...} + # 之前的逻辑虽然尝试了 content_source = transcription_data['Transcription'],但如果 key 不存在会报错 + # 且如果是 {"TaskId": "...", "Transcription": {"Sentences": ...}} 这种结构,需要先剥离外层 + + # 尝试找到真正的 sentences/paragraphs 所在的字典 + # 优先查找 'Transcription' 键,如果它对应的是字典,那么数据很可能在里面 + if 'Transcription' in content_source and isinstance(content_source['Transcription'], dict): + content_source = content_source['Transcription'] + logger.info(f"Drilled down to nested 'Transcription' key. Keys: {content_source.keys()}") # 尝试提取 Sentences sentences = content_source.get('Sentences', []) # 尝试提取 Paragraphs - # 注意:Paragraphs 字段本身可能是一个列表,或者是一个包含 Paragraphs 键的字典 paragraphs_data = content_source.get('Paragraphs', []) if sentences: @@ -264,7 +267,8 @@ class TranscriptionTaskViewSet(viewsets.ModelViewSet): if isinstance(paragraphs_data, dict): # 有时结构是 {"Paragraphs": {"Paragraphs": [...]}} 或者 {"Paragraphs": [...]} para_list = paragraphs_data.get('Paragraphs', []) - # 如果取出来是空的,但 paragraphs_data 本身有内容,可能结构不同,暂不处理深层嵌套 + if not para_list and isinstance(paragraphs_data, list): + para_list = paragraphs_data elif isinstance(paragraphs_data, list): para_list = paragraphs_data