// Determine if it is a JSON string export function isJSON(str: string) { if (typeof str === 'string') { try { const data = JSON.parse(str); if (data) { return true; } return false; } catch { return false; } } return false; } // Determine if it is a JSON string export function JSONStringToParse(str: string) { if (!isJSON(str)) { return str; } return JSON.parse(str); } /** * safe JSON parse function * @param text JSON string * @param defaultValue default value when parse failed * @param reviver JSON.parse reviver function * demo: * const data = safeJSONParse('{"name": "test"}', {}); * const array = safeJSONParse('[1,2,3]', []); * const num = safeJSONParse('123', 0); * const invalidJson = safeJSONParse('invalid json', { fallback: true }); */ export function safeJSONParse( text: string, defaultValue: T, reviver?: (key: string, value: any) => any, ): T { if (!text) { return defaultValue; } try { const trimmed = text.trim(); if (!trimmed) { return defaultValue; } if (trimmed === 'undefined') { return defaultValue; } if (trimmed === 'null') { return null as T; } const parsed = JSON.parse(trimmed, reviver); if (parsed === undefined || parsed === null) { return defaultValue; } return parsed; } catch { return defaultValue; } }