javascript --- > JSON字符串化

工具函数JSON.stringify()将JSON对象序列化为字符串时也用到了ToString.
看下面的代码:

console.log(JSON.stringify(42));
console.log(JSON.stringify("42"));
console.log(JSON.stringify(null));
console.log(JSON.stringify(true));

在这里插入图片描述
所有安全的JSON值都可以使用JSON.stringify字符串化.
安全的JSON值: 能够呈现为有效JSON格式的值

不安全的JSON值:

// undefined、function、symbol
// 遇到以上类型时会自动忽略(undefined)
console.log(JSON.stringify(undefined));
console.log(JSON.stringify(function(){}));
	
console.log(JSON.stringify([1, undefined, function(){},4]));
console.log(JSON.stringify({a:2, b:function(){}}));

在这里插入图片描述
如果对象中定义了toJSON方法,JSON字符串化时会首先调用该方法,然后用它的返回值来进行序列化.

// 未定义toJSON,一个循环引用
var o ={};
var a = {
    b: 42,
    c: o,
    d: function(){}
};
o.e = a;
JSON.stringify(a);

在这里插入图片描述

// 自定义toJSON,返回一个安全的JSON值
var o = {};
var a = {
    b: 42,
    c: o,
    d: function(){}
};
a.toJSON = function(){
    return { b: this.b};
};
console.log(JSON.stringify(a));

在这里插入图片描述
可以使用toJSON方法来返回一个相对安全的值.

// toJSON()应该"返回一个能够呗字符串化的安全的JSON值",而不是"返回一个JSON字符串"
var a ={
	val: [1,2,3],
	toJSON: function() {
		 return this.val.slice(1)
	}
};
var b = {
	val:[1,2,3],
	toJSON: function() {
		return "[" + this.val.slice(1).join() + "]";
	}
};
console.log(JSON.stringify(a));
console.log(JSON.stringify(b));
// 可以看出第二个函数,是对toJSON返回的字符串做字符串化,而非数组本身.

在这里插入图片描述
我们还可以向JSON.stringify()传递一个可选参数replacer用来指定对象序列化过程中哪些属性应该被处理

// replacer参数
var a = {
	b: 42,
	c: "42",
	d: [1,2,3]
};
console.log(JSON.stringify(a, ["b", "c"]));   // 需要key为b 或 c的
console.log(JSON.stringify(a, function(k,v){
	if(k !== "c") return v;
}));

在这里插入图片描述
space(可选参数)

// JSON.stringify还有一个可选参数space,用来指定输出的缩进格式
var a ={
	b: 42,
	c: "42",
	d: [1,2,3]
};
console.log(JSON.stringify(a, null, 1));
console.log(JSON.stringify(a, null, 3));
console.log(JSON.stringify(a, null, '--'));

在这里插入图片描述
参考《你不知道的JavaScript》(中卷)P48~P52

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值