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