有什么简单的方法控制指定的property不出现在JSON.stringify里面
发布于 12 年前 作者 scaner 5492 次浏览 最后一次编辑是 8 年前

对象有点交叉引用,所以需要屏蔽一下,才能转换。 所以看有什么简单的办法,把parent这样的字段给屏蔽掉。

4 回复

实现 toJSON 方法

delete 或者赋成undefined呢

/**
 * 返回安全的JSON字符串
 *
 * @param {Object} data
 * @param {String|Number} space
 * @return {String}
 * @api public
 */
var jsonStringify = function (data, space) {
  var seen = [];
  return JSON.stringify(data, function (key, val) {
    if (!val || typeof val !== 'object') {
      return val;
    }
    if (seen.indexOf(val) !== -1) {
      return '[Circular]';
    }
    seen.push(val);
    return val;
  }, space);
};

使用方法:

var a = {b: 123, c:456};
a.a = a;

// 这个会自动把a.a替换成字符串[Circular]
console.log(jsonStringify(a));
// 输出结果为:{"b":123,"c":456,"a":"[Circular]"}

// 第二个参数可以用来格式化字符串
console.log(jsonStringify(a, 2));
/* 输出结果:
{
  "b": 123,
  "c": 456,
  "a": "[Circular]"
}
*/

这个我记得有谁讲过,忘记了 mongoose里回调函数返回的数据是一个mongoose提供的model对象,该对象拥有api中model的所有方法,但是toString或者toJSON方法只会打印出数据库查出来的文本信息,而不会打印api中的model的方法

回到顶部