isUndefined()、isFunction()、isString() 等方法请查看,类型判定(#1) isFunctionString() 等方法请查看,判定是否是函数字符串(#4)
/**
* JSON 序列化,支持函数和 undefined
* @param data 数据
*/
export const JSONStringify = (data: any) => {
const replacer = (_: string, v: any) => {
// 处理 undefined 丢失问题
if (isUndefined(v)) {
return null;
}
// 处理函数丢失问题
if (isFunction(v)) {
return `${v}`;
}
return v;
};
return JSON.stringify(data, replacer, 2);
};
/**
* JSON 反序列化,支持函数和 undefined
* @param data 数据
*/
export const JSONParse = (data: string) => {
const reviver = (_: string, v: any) => {
if (isString(v) && isFunctionString(v)) {
return new Function(`return ${v}`)();
}
return v;
};
return JSON.parse(data, reviver);
};