1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- 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);
- }
- }
|