Skip to content

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

更新于: at 11:10

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