33 lines
924 B
TypeScript
33 lines
924 B
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
|
|
}
|
|
}
|