mirror of
https://github.com/cool-team-official/cool-admin-midway.git
synced 2025-12-10 16:12:50 +00:00
文本中提取JSON工具
This commit is contained in:
parent
d6625792af
commit
a7ab0747d1
@ -192,4 +192,80 @@ export class Utils {
|
||||
// 如果 pattern 和 url 的部分数量一致,则匹配成功
|
||||
return patternParts.length === urlParts.length;
|
||||
}
|
||||
|
||||
/**
|
||||
* 从文本中提取 JSON 字符串并转换为对象
|
||||
* @param {string} text - 可能包含 JSON 的文本
|
||||
* @returns {Object|Array|null} - 解析出的 JSON 对象,如果没有找到有效 JSON 则返回 null
|
||||
*/
|
||||
extractJSONFromText(text) {
|
||||
if (!text || typeof text !== 'string') {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
// 尝试直接解析整个文本
|
||||
return JSON.parse(text);
|
||||
} catch (e) {
|
||||
// 整个文本不是有效的 JSON,尝试提取 JSON 部分
|
||||
}
|
||||
|
||||
// 查找可能的 JSON 开始位置({ 或 [)
|
||||
const possibleStarts = [];
|
||||
for (let i = 0; i < text.length; i++) {
|
||||
if (text[i] === '{' || text[i] === '[') {
|
||||
possibleStarts.push(i);
|
||||
}
|
||||
}
|
||||
|
||||
// 从每个可能的起始位置尝试提取 JSON
|
||||
for (const startIndex of possibleStarts) {
|
||||
let openBraces = 0;
|
||||
let openBrackets = 0;
|
||||
let inString = false;
|
||||
let escapeNext = false;
|
||||
|
||||
for (let i = startIndex; i < text.length; i++) {
|
||||
const char = text[i];
|
||||
|
||||
// 处理转义字符
|
||||
if (inString && !escapeNext && char === '\\') {
|
||||
escapeNext = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
// 处理字符串边界
|
||||
if (!escapeNext && char === '"') {
|
||||
inString = !inString;
|
||||
}
|
||||
|
||||
if (!inString) {
|
||||
// 只在不在字符串内部时才计算括号
|
||||
if (char === '{') openBraces++;
|
||||
else if (char === '}') openBraces--;
|
||||
else if (char === '[') openBrackets++;
|
||||
else if (char === ']') openBrackets--;
|
||||
}
|
||||
|
||||
escapeNext = false;
|
||||
|
||||
// 检查是否找到了完整的 JSON 结构
|
||||
if (
|
||||
(openBraces === 0 && text[startIndex] === '{' && char === '}') ||
|
||||
(openBrackets === 0 && text[startIndex] === '[' && char === ']')
|
||||
) {
|
||||
const jsonStr = text.substring(startIndex, i + 1);
|
||||
try {
|
||||
const result = JSON.parse(jsonStr);
|
||||
return result;
|
||||
} catch (e) {
|
||||
// 这个候选 JSON 无效,继续尝试下一个
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null; // 没有找到有效的 JSON
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user