| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- /**
- * 安全的 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;
- }
- }
|