JSON.stringify()方法详解

JSON.stringify()方法详解


    JSON.stringify()方法主要是系列化对象。即把原来是对象的类型转换成字符串类型(或者更确切的说是json类型的)。该方法可以将任意的JS值序列化成JSON字符串。
1.1语法
    JSON.stringify(value [, replacer] [, space])。
1.2参数介绍
    value:是必须的,即将要序列化成JSON字符串的值。比如数组。
    replacer:是可选的。分为2种方式,一种是方法,第二种是数组。
    space:是可选的,指定缩进用的空白字符串,用于美化输出(pretty-print)。
若省略,直接输出来值。
若是一个数字,即定义缩进几个字符。如果数值大于10,则最大值为10。
若转义字符,比如“\t”,表示回车。
若仅仅是字符串,每行输出值时会把这些字符串附加其前。最大长度是10个字符。
1.3实例详解
例1:
    只有一个参数。
var student = new Object();
student.name = "Lanny";
student.age = "25";
student.location = "China";
var json = JSON.stringify(student);
alert(json);

例2:
    第二个参数存在,且第二个参数是function。则把系列化后的每一个对象传进方法里面进行处理。
var students = ["Lanny","dong","I love you"];
var json = JSON.stringify(students, function(key,value) {
    console.log(value);
return value.toString();
});
alert(json);

例3:
    第二个参数存在,且第二个参数数组。
例3-1:
    若第一个参数是数组,第二个参数也是数组,则第二个被忽略了,只是第一个被系列化了。
var students = ["Lanny","dong","I love you"];
var stu = ["1","2"];
var json = JSON.stringify(students,stu);
alert(json);

例3-1:
    若第一个参数是对象,第二个参数是数组的。再若数组的value在对象存在,则以数组的值做key,对象值为value进行转换。若不存在,则忽略。
var student ={qq : "5485891512", name : "Lanny", age : 25};
var stu =["qq","age","Hi"];
var json = JSON.stringify(student,stu); 
alert(json);

例4:
    第三个参数。
例4-1:
    第三个参数省略,如上述例3。
例4-2:
    第三个参数是一个数字。
var student ={qq : "5485891512", name : "Lanny", age : 25};
var stu =["qq","age","Hi"];
var json = JSON.stringify(student,stu,100);
alert(json);

例4-3:
    第三个参数是转义字符。
var student ={qq : "5485891512", name : "Lanny", age : 25};
var stu =["qq","age","Hi"];
var json = JSON.stringify(student,stu,"\t");
alert(json);

例4-4:
    第三个参数仅仅是字符串。
var student ={qq : "5485891512", name : "Lanny", age : 25};
var stu =["qq","age","Hi"];
var json = JSON.stringify(student,stu,"HaiKou");
alert(json);

1.4序列化注意事项
1.4.1事项
    非数组对象的属性不能保证以特定的顺序出现在序列化后的字符串中。
    布尔值、数字、字符串的包装对象在序列化过程中会自动转换成对应的原始值。
    undefined、任意的函数以及symbol值,在序列化过程中会被忽略(出现在非数组对象的属性值中时)或者被转换成 null(出现在数组中时)。
    以symbol为属性键的属性都会被完全忽略掉,即便replacer参数中强制指定包含了它们。
    不可枚举的属性会被忽略。
1.4.2实例详解
例1:
    序列化一个对象。
JSON.stringify({}); //返回值:'{}'
JSON.stringify({ x: 5 }); //返回值:'{"x":5}'
JSON.stringify({x: 5, y: 6}); //返回值:'{"x":5,"y":6}' 或者 '{"y":6,"x":5}'

例2:
    序列化一个字符串。
JSON.stringify("foo"); //返回值:'"foo"'
例3:
    序列化一个布尔值。
JSON.stringify(true); //返回值:'true'
例4:
    序列化一个数字。
JSON.stringify(new Number(1)); //返回值:'1'
例5:
     序列化一个含有布尔值、数字、字符串的对象。
JSON.stringify([1, "false", false]); //返回值:'[1,"false",false]'
JSON.stringify([new Number(1), new String("false"), new Boolean(false)]); //返回值:'[1,"false",false]'

例6:
   其他序列化情况。
JSON.stringify({x: undefined, y: Object, z: Symbol("")}); //返回值:'{}'
JSON.stringify([undefined, Object, Symbol("")]); //返回值:'[null,null,null]'
JSON.stringify({[Symbol("foo")]: "foo"}); //返回值:'{}'
JSON.stringify({[Symbol.for("foo")]: "foo"}, [Symbol.for("foo")]); //返回值:'{}'
JSON.stringify( Object.create(null, { x: { value: 'x', enumerable: false }, y: { value: 'y', enumerable: true } }) );// 返回值:'{"y":"y"}'

1.5扩展——toJSON 方法
    如果一个被序列化的对象拥有toJSON方法,那么该toJSON方法就会覆盖该对象默认的序列化行为:不是这个对象被序列化,而是调用toJSON方法后的返回值会被序列化。
例:
var obj = {
foo:'foo',
toJSON : function(){
    return 'bar';
}
};
JSON.stringify(obj); //返回值:'"bar"'
JSON.stringify({x:obj}); //返回值:'{"x":"bar"}'

猜你喜欢

转载自wsj123.iteye.com/blog/2310160