Javascript stringify会删除不可字符串化的值,为什么?
我很难理解JSON.stringify在Node.js环境中工作时会丢失一些不可stringify字段的数据 我不明白的是:Javascript stringify会删除不可字符串化的值,为什么?,javascript,node.js,json,Javascript,Node.js,Json,我很难理解JSON.stringify在Node.js环境中工作时会丢失一些不可stringify字段的数据 我不明白的是: 如果我们有有效的JSON,并且我们有值作为函数,我们就不能将其字符串化: var foo={func:function(){}; console.log(JSON.stringify(foo))我想这就是答案?如果没有,请告诉我 对于外部绑定,您将获得{},内部func:function(){}返回未定义的,因此是无效的json 当您试图将无法转换为json的内容(即
var foo={func:function(){};
console.log(JSON.stringify(foo))
我想这就是答案?如果没有,请告诉我
通常,为了防止意外,您应该确保它只包含数组、对象、字符串、数字、布尔值和null 如果确实需要保留function属性,可以使用JSON.stringify的第二个参数来描述如何处理它 比如说
让obj={
func:function(){}
}
让json=json.stringify(obj,函数(键,值){
如果(值的类型==“函数”){
返回“这是一个函数”;
}否则{
返回值;
}
})
log(json)代码>JSON是一种数据交换格式。它用于传输数据,与所使用的语言无关。通常,如果某些属性/值依赖于语言,则在转换为JSON时它不是有效值
定义了许多可以在JSON中使用的值类型
例如,发生以下情况:
- 当一个值被转换为JSON时,如果合适的话,它将被转换为它的JSON格式,或者返回为
未定义的
- 将对象转换为JSON时,如果合适,对象的每个属性都将转换为其JSON形式,或者将其忽略(因为转换后的值将是
未定义的
)
- 当数组转换为JSON时,如果合适,数组的每个元素都会转换为JSON格式,或者替换为
null
使用passed作为JSON.stringify()
的第二个参数可以覆盖此行为。为什么您认为{func:function(){}
算作“有效的JSON”?JSON是并支持字符串、数字、对象(同样只包括允许的类型)、数组、布尔值和null
值。没有别的了。如果值是其他值,则它不是“有效的JSON”。JSON(根据设计)无法表示任意JavaScript构造。JSON是一种数据交换格式。虽然符号看起来像JS,但它可以被各种语言(JS、PHP、Java等)使用。因此,能够在其中存储函数是毫无意义的,因为它们在JS应用程序之外的任何其他上下文中都是无用的(函数不是数据),所以,任何无效的JSON都不会被这个静态函数字符串化?我的问题是JSON.stringify什么时候会删除这些值?@JoachimSauer我知道,我上面提到的不是有效的JSON,这就是它删除这些值的原因。是吗?JSON.stringify
将始终输出符合Joachim发布的链接中描述的规范的JSON。如果你读了那一页,你就会知道什么是有效的。其他任何东西都将被丢弃。