JSON.stringify的使⽤⽅法
语法:
JSON.stringify(value [, replacer] [, space])
value:是必须要的字段。就是你输⼊的对象,⽐如数组啊,类啊等等。
replacer:这个是可选的。它⼜分为2种⽅式,⼀种是⽅法,第⼆种是数组。
情况⼀:我们先说数据,通过我们后⾯的实验可以知道,它是和第⼀个有关系的。⼀般来说,我们系列化后的结果是通过键值对来进⾏表⽰的。
⽐如说:
name:"lan",age:25
这种形式。
所以,如果这种形式的话,如果第⼆个的值在第⼀个存在,那么的话就以第⼆个的值做key,第⼀个值为value进⾏表⽰,如果不存
在,sorry,忽略。【是不是有点抽象,我也这么觉得,不过你等⼀下看实验就OK了。。呼呼。】
情况⼆:如果是⽅法,那很简单,就是说把系列化后的每⼀个对象(记住是每⼀个)传进⽅法⾥⾯进⾏处理。
space:很好理解,⽤什么来做分隔符的。
1.如果省略的话,那么显⽰出来的值就没有分隔符。直接输出来
2.如果是⼀个数字的话,那么它就定义缩进⼏个字符,当然如果⼤于10 ,则最⼤值为10.
3.如果是⼀些转义字符,⽐如“\t”,表⽰回车,那么它每⾏⼀个回车。
4.如果仅仅是字符串,OK,就在每⾏输出值的时候把这些字符串附加上去就OK。当然,最⼤长度也是10个字符。
开始⽤实例说明;
1.只有⼀个参数的情况下:
var student = new Object();
student.name = "Lanny";
student.age = "25";
student.location = "China";
var json = JSON.stringify(student);
alert(student);
结果如下:
有些⼈可能会怀疑JSON.stringify的作⽤,OK。那假如,我们不要这个函数。代码下⾯的样⼦:
var student = new Object();
student.name = "Lanny";
student.age = "25";
student.location = "China";
/
/ var json = JSON.stringify(student);
alert(student);
恭喜你得到的结果是:
没骗你吧,继续。
2.第⼆个参数存在,并且第⼆个参数还是function的时候
var students = new Array() ;
students[0] = "Lanny";
students[1] = "dong";
students[2] = "I love you";
var json = JSON.stringify(students,switchUpper);
function switchUpper(key, value) {
String().toUpperCa();
}
alert(json);
//var json = JSON.stringify(students, function (key,value) {
//String().toUpperCa();
//});
上⾯的⽅法也可以换成下⾯的,2个都是⼀样,只是写法有那么⼀点点的不⼀样⽽已。
得到结果如下:
3.第⼆个参数存在,并且第⼆个参数不是function,⽽是数组的时候。
3.1 【误区】如果第⼀个参数是数组,第⼆个参数也是数组的话,只显⽰第⼀个参数的值。
⽐如:
var students = new Array() ;
students[0] = "Lanny";
students[1] = "dong";
students[2] = "I love you";
var stu = new Array();
stu[0] = "1";
stu[1] = "2";
var json = JSON.stringify(students,stu);
alert(json);
sorry 得到的结果就是:
第⼆个被忽略了,只是第⼀个被系列化了。
3.2 如果第⼀个是对象(这⾥说的对象就像在C#⾥⾯可以进⾏new的),第⼆个是数组的。
那么如果第⼆个的value在第⼀个存在,那么的话就以第⼆个的值做key,第⼀个值为value进⾏表⽰var student = new Object();
student.qq = "5485891512";
student.name = "Lanny";
student.age = 25;
var stu = new Array();
stu[0] = "qq";
stu[1] = "age";
stu[2] = "Hi";//这个student对象⾥不存在。
var json = JSON.stringify(student,stu);
alert(json);
得到的结果如下:
因为stu[2] = "Hi";这个Hi 在第⼀个找不到,所以就不进⾏显⽰了。
4.第三个参数
4.1.如果省略的话,那么显⽰出来的值就没有分隔符。直接输出来
⽐如:
var student = new Object();
student.qq = "5485891512";
student.name = "Lanny";
student.age = 25;
var stu = new Array();
stu[0] = "qq";
stu[1] = "age";
stu[2] = "Hi";
var json = JSON.stringify(student,stu);
alert(json);
输出的就是:
4.2.如果是⼀个数字的话,那么它就定义缩进⼏个字符,当然如果⼤于10 ,则最⼤值为10.
var student = new Object();
student.qq = "5485891512";
student.name = "Lanny";
student.age = 25;
var stu = new Array();
stu[0] = "qq";
stu[1] = "age";
stu[2] = "Hi";
var json = JSON.stringify(student,stu,100);//注意这⾥的100
alert(json);
那么得到的是:
空开来了10个字符。
4.3.如果是⼀些转义字符,⽐如“\r”,表⽰回车,那么它每⾏⼀个回车。【谢谢回复的朋友指出了这个错误!】
也是⼀样。
4.4.如果仅仅是字符串,OK,就在每⾏输出值的时候把这些字符串附加上去就OK。当然,最⼤长度也是10个字符。
如果是var json = JSON.stringify(student,stu,“HaiKou”);//
(OA差旅遇到的问题):
var str='{"name":"liming","age":"20"}';
其中str定义的是字符串,键值对中的key是带有引号的:“name”
var strSec={
name:"xiaohua",
age:25
};
其中strSec是对象,键值对中的key不带有引号,如name
var str='{"name":"liming","age":"20"}';
console.log(JSON.par(str));
/
/返回对象格式: {name: "liming", age: "20"}
var strSec={
name:"xiaohua",
age:25
};
var strFour={
info:JSON.stringify(strSec),
ageInfo:33
};
console.log(strFour);
//对象{info: "{"name":"xiaohua","age":25}", ageInfo: 33}
console.log(JSON.stringify(strFour));
/*字符串 {"info":"{\"name\":\"xiaohua\",\"age\":25}","ageInfo":33}*/
json是⼀种简单的数据格式,⽐xml更轻巧。json是JavaScript 的原⽣格式,这意味着在 JavaScript 中处理json格式的数据不需要任何特殊的API 或⼯具包。json的语法规则其实很简单:对象是⼀个⽆序的“‘名称/值’对”集合。⼀个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟⼀个“:”(冒号);“‘名称/值’ 对”之间使⽤“,”(逗号)分隔。看个例⼦先:
//定义⼀个ur(json的格式,其实就是定义⼀个js函数(变量)的⽅式⽽已)
var ur =
{
"urname": "jeff wong",
"age": 25,
"info": { "tel": "12345678", "cellphone": "133********" },
"address": // 数组
[
{ "city": "beijing", "postcode": "101110" },
{ "city": "ny city", "postcode": "911119" }
]
}
json数据的格式是以键值对的形式写的,最好键值能够写成带有引号的形式,但是写成纯字⾯量对象形式,也就是不带引号也没有区别;
OA差旅中传输数据时,
可以看到goFlightInfo对应的是⼀个对象,所以要把这个对象转换成字符串的形式,因此要在该对象前⾯加上⼀个引号。使⽤JSON.stringify()函数将对象转换为字符串