import BigIntUtils from "./BigIntUtils"; /** * JSON工具类 - 用于处理大整数的JSON序列化和反序列化 */ export default class JsonUtils { /** * 自定义JSON解析,将大整数转换为字符串 * @param jsonString JSON字符串 * @returns 解析后的对象 */ static parse(jsonString: string): any { return JSON.parse(jsonString, (key, value) => { // 检查是否为数字且超出安全整数范围 if (typeof value === 'number' && !Number.isSafeInteger(value)) { return value.toString(); // 转换为字符串以保持精度 } return value; }); } /** * 自定义JSON序列化,确保大整数正确序列化 * @param obj 要序列化的对象 * @returns JSON字符串 */ static stringify(obj: any): string { return JSON.stringify(obj, (key, value) => { // 检查是否为数字且超出安全整数范围 if (typeof value === 'number' && !Number.isSafeInteger(value)) { return value.toString(); // 转换为字符串以保持精度 } return value; }); } /** * 深度克隆对象,确保大整数正确处理 * @param obj 要克隆的对象 * @returns 克隆后的对象 */ static deepClone(obj: any): any { return this.parse(this.stringify(obj)); } /** * 检查对象中是否包含大整数 * @param obj 要检查的对象 * @returns 是否包含大整数 */ static hasBigIntegers(obj: any): boolean { const jsonStr = JSON.stringify(obj); return jsonStr.includes('"') && /:\s*"\d{16,}"/.test(jsonStr); } }