/** * 安全的 JSON 解析工具函数 * 处理各种可能导致 JSON 解析错误的情况 */ /** * 安全解析 JSON 字符串 * @param {string|object} jsonString - 要解析的 JSON 字符串或对象 * @param {any} defaultValue - 解析失败时的默认值 * @returns {any} 解析后的对象或默认值 */ export function safeJsonParse(jsonString, defaultValue = null) { try { // 如果输入为空或null,返回默认值 if (!jsonString || jsonString === 'null' || jsonString === 'undefined') { return defaultValue; } if (typeof jsonString === 'string') { // 尝试解析JSON字符串 const parsed = JSON.parse(jsonString); return parsed; } else if (jsonString && typeof jsonString === 'object') { // 如果已经是对象,直接返回 return jsonString; } else { return defaultValue; } } catch (error) { console.error('JSON parse error:', error, 'Input:', jsonString); return defaultValue; } } /** * 安全解析API响应数据中的URL * @param {any} responseData - API响应的data字段 * @param {string} urlKey - URL字段的键名,默认为'url' * @param {string} defaultValue - 解析失败时的默认值 * @returns {string} 解析出的URL或默认值 */ export function safeParseUrl(responseData, urlKey = 'url', defaultValue = '') { try { let parsedData; if (typeof responseData === 'string') { parsedData = JSON.parse(responseData); } else if (responseData && typeof responseData === 'object') { parsedData = responseData; } else { console.error('Invalid response data format:', responseData); return defaultValue; } return parsedData[urlKey] || defaultValue; } catch (error) { console.error('URL parse error:', error, 'Data:', responseData); return defaultValue; } } /** * 安全获取用户数据 * @param {object} session - Session 对象 * @returns {object} 用户数据对象 */ export function safeGetUserData(session) { const userData = session.Get("user", true); return safeJsonParse(userData, {}); } /** * 安全获取 Session 中的布尔值 * @param {object} session - Session 对象 * @param {string} key - Session 键名 * @param {boolean} defaultValue - 默认值 * @returns {boolean} 布尔值 */ export function safeGetBoolean(session, key, defaultValue = false) { try { const value = session.Get(key); if (value === null || value === undefined) { return defaultValue; } return JSON.parse(value); } catch (error) { console.error(`Error parsing boolean for key ${key}:`, error); return defaultValue; } } /** * 安全获取 Session 中的对象 * @param {object} session - Session 对象 * @param {string} key - Session 键名 * @param {object} defaultValue - 默认值 * @returns {object} 对象 */ export function safeGetObject(session, key, defaultValue = {}) { try { const value = session.Get(key, true); return safeJsonParse(value, defaultValue); } catch (error) { console.error(`Error parsing object for key ${key}:`, error); return defaultValue; } }