我很难理解 JSON.stringify 在 Node.js 环境中工作时会丢弃一些非字符串化字段的数据。
我不明白的是:
var foo = {func : function () {}};
console.log(JSON.stringify(foo))
var arr = [function(){} , 'Walk', undefined ];
console.log(JSON.stringify(arr));
这一切都发生在我创建对象的深层副本时,它会删除关键数据。我真的很难把它附加到问题上。我只需要知道一般情况下什么时候会下降,这背后一定有逻辑。我一直在浏览网页,但找不到任何可以帮助我了解其背后功能的资源/博客。
谁能帮我理解它是什么?或者分享一个好的链接或博客,可以帮助我消除疑虑?
答案 0 :(得分:2)
我认为这可能是答案?如果没有,请告诉我。
您为外部绑定获取 {},内部 func : function(){} 返回 undefined,因此不是有效的 json。
当您尝试将无法转换为 json 的内容(即未定义或函数声明)进行字符串化时,您会得到 null。
答案 1 :(得分:2)
一般来说,为了防止意外,你应该确保它只包含数组、对象、字符串、数字、布尔值和空值。
如果你真的需要保留函数属性,你可以使用 JSON.stringify 的第二个参数来描述你想如何处理它。
例如
let obj = {
func: function () { }
}
let json = JSON.stringify(obj, function (key, value) {
if (typeof value === "function") {
return "this is a function";
} else {
return value;
}
})
console.log(json);
Mozilla 网页描述了它最初是如何工作的。
<块引用>未定义、函数和符号不是有效的 JSON 值。如果在转换过程中遇到任何这样的值,它们要么被省略(在对象中找到时),要么更改为 null(在数组中找到时)。当传入像 JSON.stringify(function(){}) 或 JSON.stringify(undefined) 这样的“纯”值时,JSON.stringify() 可以返回 undefined。
答案 2 :(得分:2)
JSON 是一种数据交换格式。它用于传输数据,与使用的语言无关。通常,如果某些属性/值与语言相关,则转换为 JSON 时它不是有效值。
JSON standard 定义了许多可以在 JSON 中使用的值类型。
对于 JSON.stringify()
,发生以下情况:
undefined
返回。undefined
)。null
。可以使用 custom "replacer" function 作为第二个参数传递给 JSON.stringify()
来覆盖此行为。