// 指标映射种子解析纯函数(无副作用、无状态,不 import request) // 支持两种输入: // 1) JSON 数组:[{"rawName":"乳酸菌","definitionId":3}, ...] // 2) CSV 两列:rawName,definitionId(逗号/中文逗号分隔,空行跳过) export function parseSeedsText(text) { if (text === null || text === undefined) return [] const trimmed = String(text).trim() if (!trimmed) return [] // 先尝试 JSON 数组 try { const parsed = JSON.parse(trimmed) if (Array.isArray(parsed)) { return parsed .map(item => { const rawName = String(item.rawName || '').trim() if (!rawName) return null return { rawName, definitionId: item.definitionId || null } }) .filter(Boolean) } } catch (e) { // 非法 JSON → 走行解析(CSV 回退) } // 按行 CSV 解析 const lines = trimmed.split(/\r?\n/) const seeds = [] for (let i = 0; i < lines.length; i++) { const line = lines[i].trim() if (!line) continue const cols = line.split(/[,,]/) const rawName = (cols[0] || '').trim() if (!rawName) continue // 单列且含空格的多词行视为无结构文本(如被误判的 JSON 串),跳过 if (cols.length === 1 && /\s/.test(rawName)) continue let definitionId = null if (cols.length > 1 && cols[1].trim() !== '') { const num = Number(cols[1].trim()) if (!isNaN(num)) definitionId = num } seeds.push({ rawName, definitionId }) } return seeds }