31 lines
1.0 KiB
TypeScript
31 lines
1.0 KiB
TypeScript
export const extractJSON = (str?: string) => {
|
|
if (!str) return
|
|
let firstOpen = 0, firstClose = 0, candidate = '';
|
|
firstOpen = str.indexOf('{', firstOpen + 1);
|
|
do {
|
|
firstClose = str.lastIndexOf('}');
|
|
if (firstClose <= firstOpen) {
|
|
return;
|
|
}
|
|
do {
|
|
candidate = str.substring(firstOpen, firstClose + 1);
|
|
try {
|
|
let result = JSON.parse(candidate);
|
|
return { result, start: firstOpen < 0 ? 0 : firstOpen, end: firstClose }
|
|
}
|
|
catch (e) { }
|
|
firstClose = str.substring(0, firstClose).lastIndexOf('}');
|
|
} while (firstClose > firstOpen);
|
|
firstOpen = str.indexOf('{', firstOpen + 1);
|
|
} while (firstOpen != -1);
|
|
}
|
|
|
|
export const parseJSON = (str?: string | null): any | undefined => {
|
|
if (!str) return undefined
|
|
try {
|
|
const parsed = JSON.parse(str);
|
|
return typeof parsed === "object" ? parsed : undefined;
|
|
} catch (error) {
|
|
return undefined;
|
|
}
|
|
} |