jsonUtils.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /**
  2. * 安全的 JSON 解析工具函数
  3. * 处理各种可能导致 JSON 解析错误的情况
  4. */
  5. /**
  6. * 安全解析 JSON 字符串
  7. * @param {string|object} jsonString - 要解析的 JSON 字符串或对象
  8. * @param {any} defaultValue - 解析失败时的默认值
  9. * @returns {any} 解析后的对象或默认值
  10. */
  11. export function safeJsonParse(jsonString, defaultValue = null) {
  12. try {
  13. // 如果输入为空或null,返回默认值
  14. if (!jsonString || jsonString === 'null' || jsonString === 'undefined') {
  15. return defaultValue;
  16. }
  17. if (typeof jsonString === 'string') {
  18. // 尝试解析JSON字符串
  19. const parsed = JSON.parse(jsonString);
  20. return parsed;
  21. } else if (jsonString && typeof jsonString === 'object') {
  22. // 如果已经是对象,直接返回
  23. return jsonString;
  24. } else {
  25. return defaultValue;
  26. }
  27. } catch (error) {
  28. console.error('JSON parse error:', error, 'Input:', jsonString);
  29. return defaultValue;
  30. }
  31. }
  32. /**
  33. * 安全解析API响应数据中的URL
  34. * @param {any} responseData - API响应的data字段
  35. * @param {string} urlKey - URL字段的键名,默认为'url'
  36. * @param {string} defaultValue - 解析失败时的默认值
  37. * @returns {string} 解析出的URL或默认值
  38. */
  39. export function safeParseUrl(responseData, urlKey = 'url', defaultValue = '') {
  40. try {
  41. let parsedData;
  42. if (typeof responseData === 'string') {
  43. parsedData = JSON.parse(responseData);
  44. } else if (responseData && typeof responseData === 'object') {
  45. parsedData = responseData;
  46. } else {
  47. console.error('Invalid response data format:', responseData);
  48. return defaultValue;
  49. }
  50. return parsedData[urlKey] || defaultValue;
  51. } catch (error) {
  52. console.error('URL parse error:', error, 'Data:', responseData);
  53. return defaultValue;
  54. }
  55. }
  56. /**
  57. * 安全获取用户数据
  58. * @param {object} session - Session 对象
  59. * @returns {object} 用户数据对象
  60. */
  61. export function safeGetUserData(session) {
  62. const userData = session.Get("user", true);
  63. return safeJsonParse(userData, {});
  64. }
  65. /**
  66. * 安全获取 Session 中的布尔值
  67. * @param {object} session - Session 对象
  68. * @param {string} key - Session 键名
  69. * @param {boolean} defaultValue - 默认值
  70. * @returns {boolean} 布尔值
  71. */
  72. export function safeGetBoolean(session, key, defaultValue = false) {
  73. try {
  74. const value = session.Get(key);
  75. if (value === null || value === undefined) {
  76. return defaultValue;
  77. }
  78. return JSON.parse(value);
  79. } catch (error) {
  80. console.error(`Error parsing boolean for key ${key}:`, error);
  81. return defaultValue;
  82. }
  83. }
  84. /**
  85. * 安全获取 Session 中的对象
  86. * @param {object} session - Session 对象
  87. * @param {string} key - Session 键名
  88. * @param {object} defaultValue - 默认值
  89. * @returns {object} 对象
  90. */
  91. export function safeGetObject(session, key, defaultValue = {}) {
  92. try {
  93. const value = session.Get(key, true);
  94. return safeJsonParse(value, defaultValue);
  95. } catch (error) {
  96. console.error(`Error parsing object for key ${key}:`, error);
  97. return defaultValue;
  98. }
  99. }