| 12345678910111213141516171819202122232425262728 |
- // 简单安全的 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
|