You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS对象转JSON时匿名函数丢失,如何完整导出含函数的对象?

如何导出包含函数的JavaScript对象

JSON本身不支持函数类型,所以用标准的JSON.parse/stringify处理时,函数会被自动移除。但如果要导出带函数的完整对象,有两种可行的办法:

方案1:自定义序列化和反序列化

用JSON.stringify的第二个参数(replacer)把函数转成字符串保存,再用JSON.parse的第二个参数(reviver)把字符串转回函数。

代码示例:

// 原始带函数的对象
const obj = {
  a: 1000,
  b: () => { console.log("hello"); }
};

// 序列化:把函数转为源码字符串
const serialized = JSON.stringify(obj, (key, value) => {
  if (typeof value === 'function') {
    return value.toString();
  }
  return value;
});

// 反序列化:把字符串转回可执行的函数
const deserialized = JSON.parse(serialized, (key, value) => {
  if (typeof value === 'string' && (value.startsWith('(') || value.startsWith('function'))) {
    return eval(`(${value})`);
  }
  return value;
});

deserialized.b(); // 执行后会打印 "hello"

方案2:直接用eval解析完整对象字符串

你示例里的eval其实已经把函数解析出来了,只是console.log默认不会显示函数的源码而已。试试打印函数的字符串形式:

let test = '({"a":1000, "b":()=>{return console.log("hello");}})';
test = eval(test);
console.log(test.b.toString()); // 会输出: ()=>{return console.log("hello");}

这种方式直接处理JS对象语法,不需要转成JSON,但要注意必须确保字符串是完全可信的,不然eval会执行恶意代码,风险很高。

重要提醒

  • 这种带函数的“伪JSON”只能在JavaScript环境中解析,没法跨语言兼容,如果需要和其他语言交互,建议把函数逻辑存成普通字符串,到目标环境再手动处理。
  • eval存在严重的安全隐患,非绝对信任的数据源绝对不能用。

内容的提问来源于stack exchange,提问作者Kyle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 20:09:11