JSON.parse()与JSON.stringify() (浏览器兼容性:IE8以上、Chrome、Firefox3.5、Opera10.5、Safari4.0)

来源:互联网 发布:scientific linux 6 编辑:程序博客网 时间:2024/05/29 18:10

JSON.parse():将JavaScript对象表示法(JSON)字符串转换为对象(不允许以逗号结束),格式为:

JSON.parse(string[,reviver])//string:必需的,要进行解析的有效的JSON字符串//reviver:可选,用来转换解析出的属性值的函数//返回值为一个从string字符串中解析出的对象或者数组

一个简单的实例如下:

var str = '{"name":"user","password":"psd","sex":"man","age":"120"}';var parse_str = JSON.parse(str);console.log(parse_str);  //Object {name: "user", password: "psd", sex: "man", age: "120"}
var str = '[1,2,3,4]';var parse_str = JSON.parse(str);console.log(parse_str);//[1, 2, 3, 4]

在reviver函数指定的情况下,解析出的JavaScript值(解析值)会经过一次转换后才将最终返回。具体来说就是:解析值本身以及它所包含的所有属性,会按照一定的顺序(从最最里层的属性开始,一级级往外,最终到达顶层)分别的去调用reviver函数,在调用过程中,当前属性所属的对象作为this值,当前的属性名以及属性值作为第一参数和第二参数传递到reviver中。如果reviver返回Undefined,则当前属性会从所属对象中删除,如果返回了其他值,则返回的值成为当前属性新的属性值。

var str = '{"name":"user","password":"psd","sex":"man","age":"120"}';var parse_str = JSON.parse(str,function(k,v){    return v + "_test";});console.log(parse_str);///Object {name: "user_test", password: "psd_test", sex: "man_test", age: "120_test"}

JSON.stringify():将任意的JavaScript值序列化成JSON字符串,语法为:

JSON.stringify(value[,replacer[,space]])

一个简单的实例如下:

var str = {"name":"user","password":"psd","sex":"man","age":"120"};var parse_str = JSON.stringify(str);console.log(parse_str);///{"name":"user","password":"psd","sex":"man","age":"120"}

Value:必需的 将要序列化成JSON字符串的值

Replacer:可选的
如果该参数是一个函数,则在序列化过程中,被序列化的值的每个值都会经过该函数的转换和处理,该函数的返回值会影响正在被字符串化的键值对会不会被加入最终生成的JSON字符串中化,如下:
1、如果返回一个Number类型的值,则该数字会通过toString方法转换成字符串,来作为正在被字符串化的键值对中的值被添加到JSON字符串中

2、如果返回一个String类型的值,则该字符串会作为正在被字符串化的键值对中的值被添加到JSON字符串中

3、如果返回一个Boolean类型的值,则该布尔值会转化成字符串“true”或“false” 作为正在被字符串化的键值对中的值被添加到JSON字符串中

4、如果返回一个其他类型的对象,则该对象的键值对会被递归的按照上述的规则添加到JSON字符串中,但如果该对象是function类型的,则它不会变遍历,replacer函数会转而处理下一个键值对

5、如果返回Undefined,则该键值对不会被添加到JSON字符串中

var str = 123;var parse_str = JSON.stringify(str,function(k,v){    return v*3;});console.log(typeof parse_str);///string
var str = {"name":"user","password":"psd","sex":"man","age":120};var parse_str = JSON.stringify(str,function(k,v){    if(typeof(v) === "string")        return v + "_test";    return v;});console.log(parse_str);//{"name":"user_test","password":"psd_test","sex":"man_test","age":120}

如果该参数是一个数组,则只有包含在这个数组中的属性名才会被序列化到最终的JSON字符串中

Space参数:用来控制结果字符串里面的间距

var str = {"name":"user","password":"psd","sex":"man","age":120};var parse_str = JSON.stringify(str,null,"\n");console.log(parse_str);//{////"name": "user",////"password": "psd",////"sex": "man",////"age": 120//}

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

0 0