// 简单安全的 JSON 解析器,可在解析前把 Snowflake 类的长整数字段(如 id、userId、patientUserId、boundUserId、relatedEntityId) // 转换为字符串(通过在值外包裹引号)以避免 JS Number 导致的精度丢失。 // 注意:这是一个保守实现,仅针对常见字段名做文本替换;如果你需要更强健的解决方案,考虑使用 json-bigint 等专用库。 const jsonbig = JSON export function safeJsonParse(raw: string | object | undefined | null) { if (typeof raw === 'string') { try { // 将长整数字段包装为字符串,避免 JSON.parse 将其转换为 Number 并引发精度丢失。 // 匹配示例: "userId":1988147181088956418 -> "userId":"1988147181088956418" const preprocessed = raw.replace(/"(id|userId|patientUserId|boundUserId|relatedEntityId)"\s*:\s*([0-9]{10,})/g, '"$1":"$2"') return jsonbig.parse(preprocessed) } catch (err) { return raw } } return raw } export function safeJsonStringify(v: any) { try { return jsonbig.stringify(v) } catch (e) { return JSON.stringify(v) } } export default jsonbig