JSON对象在所有现代浏览器中都可用,的有两种用于处理处理JSON格式的内容方式,分别是parsestringify

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()方法。两个函数可以接受函数作为第二个参数,你可以在此回调函数做些提前的操作。