JSON.stringify ( value [,replacer] [,space] )
将 JavaScript 值转换为JavaScript 对象表示法 (Json) 字符串。注意:value中的方法不会转换成字符串,仅转换各种值类型和数组。
参数:
value
必需。 要转换的JavaScript 值(可以支持所有数据类型,但通常传递对象或数组)。且不允许循环引用。
可选。用于转换结果的函数或数组。
如果 replacer是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。 当 value 参数也为数组时,将忽略replacer 数组。
如果 replacer 为函数,则JSON.stringify 将调用该函数
(即执行replacer.call( obj,key,value))。另外,
微软网站上说执行该函数时,会传入每个成员的键和值。使用返回值而不是原始值。
如果此函数返回undefined,则排除成员。 根对象的键是一个空字符串:""。但是,经过实测且查看了JSON2的源码,确认并不会传入每个成员的键和值,而仅仅以空字符串形式调用replacer函数。该函数的实质是自定义的用于转化为JSON字符串的函数。
space
可选。 向返回值JSON 文本添加缩进、空格和换行符以使其更易于读取。
如果省略space,则将生成返回值文本,而没有任何额外空格。
如果 space是一个数字,则返回值文本在每个级别缩进指定数目的空格。 如果 space 大于 10,则文本缩进 10 个空格。
如果 space是一个非空字符串(例如“\t”),则返回值文本在每个级别中缩进字符串中的字符。
如果 space 是长度大于 10个字符的字符串,则使用前 10 个字符。
举例一:value参数传入对象
var obj = {
name: "Peter",
age: 100,
children: ["boy","girl"],
school:{
name:"No.6 school",
distinct:"One Block"
},
action: function () {
returntrue;
}
};
var array1 = ["hunter","children","age"];
var fun = function (key,value) {
return value.toString().toUpperCase();
};
var ret =JSON.stringify(obj);
/*
{"name":"Peter","age":100,"children":["boy","school":{"name":"No.6school","distinct":"One Block"}}
*/
/*
注:键值次序与对象中定义的一致
*/
ret =
JSON.stringify(obj,array1);
/*
{"children":["boy",
"age":100
}
*/
/*
注:键值次序与array1中的值的次序有关
*/
ret =
JSON.stringify(obj,fun);
/*
[OBJECTOBJECT]
*/
ret =
JSON.stringify(obj,array1,3);
/*
{
"children":[
"boy",
"girl"
],
"age":100
}
*/
/*
注:每个级别缩进3个空格
*/
ret =
JSON.stringify(obj,
array1,"
");
//双引号内有三个空格
/*
{
"children":[
"boy",
"girl"
],
"age":100
}
*/
/*
注:每个级别缩进3个空格
*/
举例二:value参数传入数组
var arr = ["hunter","age"];
var array1 = [1,2];
var fun = function (key,value) {
return value.toString().toUpperCase();
};
var ret =JSON.stringify(arr);
/*
["hunter","age"]
*/
ret =JSON.stringify(arr,array1);
/*
["hunter","age"]
*/
/*
注:第二个参数——数组array1,并没有起到任何作用,被JSON忽略了
*/
ret =JSON.stringify(arr,fun);
/*
"HUNTER,CHILDREN,AGE"
*/
ret =JSON.stringify(arr,3);
/*
[
"hunter",
"children",
"age"
]
*/
/*
注:每个级别缩进3个空格
*/
ret =JSON.stringify(arr,"
");
// 双引号内有三个空格
/*
[
"hunter",
"children",
"age"
]
*/
/*
注:每个级别缩进3个空格*/
其它:
如果 value 具有toJSON 方法,则 JSON.stringify 函数将使用该方法的返回值。 如果 toJSON 方法的返回值为undefined,则不转换成员。 这使对象能够确定自己的 JSON 表示形式。
将不会转换不具有 JSON表示形式的值,例如 undefined。 在对象中,将丢弃这些值。 在数组中,会将这些值替换为 null。
字符串值以引号开始和结束。 所有 Unicode字符可括在引号中,但必须使用反斜杠进行转义的字符除外。 以下字符的前面必须是反斜杠:
引号 (")
反斜杠 (\)
退格键 (b)
换页符 (f)
换行符 (n)
回车符 (r)
水平制表符 (t)
四个十六进制数字(uhhhh)