JsonUtils.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import BigIntUtils from "./BigIntUtils";
  2. /**
  3. * JSON工具类 - 用于处理大整数的JSON序列化和反序列化
  4. */
  5. export default class JsonUtils {
  6. /**
  7. * 自定义JSON解析,将大整数转换为字符串
  8. * @param jsonString JSON字符串
  9. * @returns 解析后的对象
  10. */
  11. static parse(jsonString: string): any {
  12. return JSON.parse(jsonString, (key, value) => {
  13. // 检查是否为数字且超出安全整数范围
  14. if (typeof value === 'number' && !Number.isSafeInteger(value)) {
  15. return value.toString(); // 转换为字符串以保持精度
  16. }
  17. return value;
  18. });
  19. }
  20. /**
  21. * 自定义JSON序列化,确保大整数正确序列化
  22. * @param obj 要序列化的对象
  23. * @returns JSON字符串
  24. */
  25. static stringify(obj: any): string {
  26. return JSON.stringify(obj, (key, value) => {
  27. // 检查是否为数字且超出安全整数范围
  28. if (typeof value === 'number' && !Number.isSafeInteger(value)) {
  29. return value.toString(); // 转换为字符串以保持精度
  30. }
  31. return value;
  32. });
  33. }
  34. /**
  35. * 深度克隆对象,确保大整数正确处理
  36. * @param obj 要克隆的对象
  37. * @returns 克隆后的对象
  38. */
  39. static deepClone(obj: any): any {
  40. return this.parse(this.stringify(obj));
  41. }
  42. /**
  43. * 检查对象中是否包含大整数
  44. * @param obj 要检查的对象
  45. * @returns 是否包含大整数
  46. */
  47. static hasBigIntegers(obj: any): boolean {
  48. const jsonStr = JSON.stringify(obj);
  49. return jsonStr.includes('"') && /:\s*"\d{16,}"/.test(jsonStr);
  50. }
  51. }