Skip to content

JSON 序列化及反序列化,支持函数和 undefined

更新于: at 07:52
/**
 * JSON 序列化,支持函数和 undefined
 * @param data 数据
 * @returns 序列化后的字符串
 */
export const JSONStringify = (data: any): string => {
  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 数据
 * @returns 反序列化后的值
 */
export const JSONParse = (data: string): any => {
  const reviver = (_: string, v: any) => {
    if (isString(v) && isFunctionString(v)) {
      return new Function(`return ${v}`)();
    }
    return v;
  };
  return JSON.parse(data, reviver);
};