JS基础5
JSON
JSON格式
它是一种用于数据交换的文本格式,用来取代之前的XML。
JOSN对象:
它有两个静态对象
JSON.stringify()
方法
是用来把一个值转换为JSON字符串。该字符串符合JSON格式,并且可被JSON.parse()
方法还原。
注意转成JSON格式时有下面常犯的错误:
console.log(JSON.stringify('fool')==="\"fool\"");
console.log(JSON.stringify('fool'));
输出为:true
"fool"
从以上代码中,我们要注意当转换单引号的值时,它会转换成双引号,但是在Javascript中不能直接识别两个双引号,它会有歧义产生,会产生编译错误,所以在第一行代码中要写成"\"fool\""
的形式,才会显示true
。
它还可以有两个参数,第二个参数可以是个函数,其中如果是一个数组,它可以指定需要传换成JSON格式的属性:
var obj={
'p1':'value',
'p2':'value1'
}
var selectesProperty=['p2'];
console.log(JSON.stringify(obj,selectesProperty));
输出为:
{"p2":"value1"}
[Finished in 0.3s]
注意这里面返回的是名为p2的属性的整个内容,包括它的值,还有它只对对象的属性有效,对数组是无效的。
下面是第二个参数为函数时的例子:
function f(key,value){
if(typeof value==='number'){
value=2*value;
}
return value;
}
console.log(JSON.stringify({'a':1,'b':2},f));
返回
{"a":2,"b":4}
[Finished in 0.3s]
这里返回的是传入对象的值,而且改变了其中的值,就是用了函数f。
这个方法还可以传入第三个参数,是为了加强转换的JSON格式的可读性,
比如第三个参数如果是数字,则表示在该JSON格式下前面会出现几个空格该数字是2,则前面就出现两个空格 但是最这个数有限制,最高是10,
写法:JSON.stringify('a',null,2)
该格式的话虽然不报错但是参数3没有用到,如果第一个参数是一个对象的话才有用 比如JSON.stringify({'a':1},null,2)
。
如果是字符串,则还会加在该对象的属性名前面,注意写法,不要忘记加单引号:JSON.stringify({ p1:1, p2:2 }, null, '|-')
toJSON()
方法
如果对象中有toJSON()
方法的话,那么当JSON.stringify
想转换该对象为JSON格式时 ,会使用toJSON方法的返回值作为参数,而忽略掉其他方法。
var user = {
firstName: '三',
lastName: '张',
get fullName(){
return this.lastName + this.firstName;
},
toJSON: function () {
return {
name: this.lastName + this.firstName
};
}
};
console.log(JSON.stringify(user));
// "{"name":"张三"}
除此之外,该方法还可以用来转换前面转换不了的正则表达式。具体见文档。
JSON.parse()
方法
它可以用来把JSON格式转换为原来的值,它也可以有第二个参数,也就是可以用函数来限制其返回值。
注意传入该方法的参数必须是 正确的JSON格式。