Files
xrpl-hooks-ide/utils/json.ts
2022-08-17 11:50:49 +05:30

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
}
}