JSON对象在所有现代浏览器中都可用,的有两种用于处理处理JSON格式的内容方式,分别是parse
和stringify
。
parse
表示反序列化,也就是把json格式的字符串解释为Javascript的对象,stringify
表示序列化对象为json格式的字符串。
在Javascript中一切都是对象,你序列化任何变量,但是序列化一个函数返回未定义。
JSON.parse反序列化
JSON.parse()
函数接受JSON字符串并将其转换为JavaScript对象,过程称为反序列化。尾随逗号在JSON中无效,因此如果传递给JSON.parse()
字符串有尾随逗号,则会引发错误。
let userStr = '{"name":"myfreax","email":"mweb@myfreax.com"}';
let userObj = JSON.parse(userStr);
console.log(userObj);
{name: 'myfreax', email: 'mweb@myfreax.com'}
JSON.parse()
的第二个参数可以接受一个可以接受函数作为参数,你在这个回调函数中对返回对象的值进行转换。
例如下面的示例中将对象的值在parse
方法的第二个参数的函数中转换为大写,并返回到反序列化的之后的对象中,也就是userObj
。
parse
方法的回调函数接受两个值,分别是对象的Key和对象的值。这些值已转换为大写字符。
let userStr = '{"name":"myfreax","email":"web@myfreax.com"}';
let userObj = JSON.parse(userStr, (key, value) => {
if (typeof value === 'string') {
return value.toUpperCase();
}
return value;
});
console.log(userObj);
{name: 'MYFREAX', email: 'WEB@MYFREAX.COM'}
JSON.stringify序列化
JSON.stringify
函数接受一个参数,该参数是一个JavaScript对象并将其转换为 JSON字符串。过程称为序列化。
let userObj = {
name: "myfreax",
email: "web@myfreax.com"
};
let userStr = JSON.stringify(userObj);
console.log(userStr);
{"name":"myfreax","email":"web@myfreax.com"}
和JSON.parse函数一样。JSON.stringify()
的第二个参数也可以接受一个函数作为参数,你可以在这个回调函数中在序列化的过程中进行一些操作。
例如下面的示例中将对象的值在stringify
方法的第二个参数的函数中删除email的key和值。
stringify
方法的回调函数接受两个值,分别是对象的Key和对象的值value,可以回调函数运行你想要任何操作。
let userObj = {
name: "myfreax",
email: "myfreax@myfreax.com"
};
function replacer(key, value) {
if (key === 'email') {
return undefined;
}
return value;
}
let userStrReplacer = JSON.stringify(userObj, replacer);
console.log(userStrReplacer);
{"name":"myfreax"}
结论
在本教程中,您已经了解如何使用JSON.parse()
和JSON.stringify()
方法。两个函数可以接受函数作为第二个参数,你可以在此回调函数做些提前的操作。