JSON.stringify()⽅法详解
[align=center]JSON.stringify()⽅法详解[/align]
JSON.stringify()⽅法主要是系列化对象。即把原来是对象的类型转换成字符串类型(或者更确切的说是json类型的)。该⽅法可以将任意的JS值序列化成JSON字符串。
[b]1.1语法[/b]
JSON.stringify(value [, replacer] [, space])。
[b]1.2参数介绍[/b]
value:是必须的,即将要序列化成JSON字符串的值。⽐如数组。
replacer:是可选的。分为2种⽅式,⼀种是⽅法,第⼆种是数组。
space:是可选的,指定缩进⽤的空⽩字符串,⽤于美化输出(pretty-print)。
若省略,直接输出来值。
若是⼀个数字,即定义缩进⼏个字符。如果数值⼤于10,则最⼤值为10。
若转义字符,⽐如“\t”,表⽰回车。
若仅仅是字符串,每⾏输出值时会把这些字符串附加其前。最⼤长度是10个字符。
[b]1.3实例详解[/b]
例1:
只有⼀个参数。
[i]var student = new Object();
student.name = "Lanny";
student.age = "25";
student.location = "China";
var json = JSON.stringify(student);
alert(json);[/i]
例2:
第⼆个参数存在,且第⼆个参数是function。则把系列化后的每⼀个对象传进⽅法⾥⾯进⾏处理。
[i]var students = ["Lanny","dong","I love you"];
var json = JSON.stringify(students, function(key,value) {
console.log(value);
String();
});
alert(json);[/i]
例3:
第⼆个参数存在,且第⼆个参数数组。
例3-1:
若第⼀个参数是数组,第⼆个参数也是数组,则第⼆个被忽略了,只是第⼀个被系列化了。
[i]var students = ["Lanny","dong","I love you"];
var stu = ["1","2"];
var json = JSON.stringify(students,stu);
alert(json);[/i]
例3-1:
若第⼀个参数是对象,第⼆个参数是数组的。再若数组的value在对象存在,则以数组的值做key,对象值为value进⾏转换。若不存在,则忽略。
[i]var student ={qq : "5485891512", name : "Lanny", age : 25};
var stu =["qq","age","Hi"];
var json = JSON.stringify(student,stu);
alert(json);[/i]
例4:
第三个参数。
例4-1:
第三个参数省略,如上述例3。
例4-2:
第三个参数是⼀个数字。
[i]var student ={qq : "5485891512", name : "Lanny", age : 25};
var stu =["qq","age","Hi"];
var json = JSON.stringify(student,stu,100);
alert(json);[/i]
例4-3:
第三个参数是转义字符。
[i]var student ={qq : "5485891512", name : "Lanny", age : 25};
var stu =["qq","age","Hi"];
var json = JSON.stringify(student,stu,"\t");
alert(json);[/i]
例4-4:
第三个参数仅仅是字符串。
[i]var student ={qq : "5485891512", name : "Lanny", age : 25};
var stu =["qq","age","Hi"];
var json = JSON.stringify(student,stu,"HaiKou");
alert(json);[/i]
[b]1.4序列化注意事项[/b]
[b]1.4.1事项[/b]
⾮数组对象的属性不能保证以特定的顺序出现在序列化后的字符串中。
布尔值、数字、字符串的包装对象在序列化过程中会⾃动转换成对应的原始值。
undefined、任意的函数以及symbol值,在序列化过程中会被忽略(出现在⾮数组对象的属性值中时)或者被转换成 null(出现在数组中时)。
以symbol为属性键的属性都会被完全忽略掉,即便replacer参数中强制指定包含了它们。
不可枚举的属性会被忽略。
[b]1.4.2实例详解[/b]
例1:
序列化⼀个对象。
[i]JSON.stringify({}); [color=green]//返回值:'{}'[/color]
JSON.stringify({ x: 5 }); [color=green]//返回值:'{"x":5}'[/color]
JSON.stringify({x: 5, y: 6}); [color=green]//返回值:'{"x":5,"y":6}' 或者 '{"y":6,"x":5}'[/color][/i]
例2:
序列化⼀个字符串。
[i]JSON.stringify("foo"); [color=green]//返回值:'"foo"'[/color][/i]
例3:
序列化⼀个布尔值。
[i]JSON.stringify(true); [color=green]//返回值:'true'[/color][/i]
例4:
序列化⼀个数字。
[i]JSON.stringify(new Number(1)); [color=green]//返回值:'1'[/color][/i]
例5:
序列化⼀个含有布尔值、数字、字符串的对象。
[i]JSON.stringify([1, "false", false]); [color=green]//返回值:'[1,"false",false]'[/color]
JSON.stringify([new Number(1), new String("false"), new Boolean(false)]); [color=green]//返回值:'[1,"false",false]'[/color][/i]例6:
其他序列化情况。
js获取json的key和value[i]JSON.stringify({x: undefined, y: Object, z: Symbol("")});[color=green] //返回值:'{}'[/color]
JSON.stringify([undefined, Object, Symbol("")]); [color=green]//返回值:'[null,null,null]'[/color]
JSON.stringify({[Symbol("foo")]: "foo"}); [color=green]//返回值:'{}'[/color]
JSON.stringify({[Symbol.for("foo")]: "foo"}, [Symbol.for("foo")]); [color=green]//返回值:'{}'[/color]
JSON.stringify( ate(null, { x: { value: 'x', enumerable: false }, y: { value: 'y', enumerable: true } }) );[color=green]// 返回值:'{"y":"y"}'[/color][/i]
[b]1.5扩展——toJSON ⽅法[/b]
如果⼀个被序列化的对象拥有toJSON⽅法,那么该toJSON⽅法就会覆盖该对象默认的序列化⾏为:不是这个对象被序列化,⽽是调⽤toJSON⽅法后的返回值会被序列化。
例:
[i]var obj = {
foo:'foo',
toJSON : function(){
return 'bar';
}
};
JSON.stringify(obj); [color=green]//返回值:'"bar"'[/color]
JSON.stringify({x:obj}); [color=green]//返回值:'{"x":"bar"}'[/color][/i]

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。