| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- // 指标映射种子解析纯函数(无副作用、无状态,不 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
- }
|