详解javascript中的JSON对象API(自己写着玩)

72 阅读1分钟

序列化

JSON.stringify(josn,callback,n)
  • json为一个JOSN数据
  • callback是处理数据的过滤器(替代函数)
    function(key,value){
        return ...
    }
    
    • key是键名 value是键值
    • 这个函数会迭代每一个键值对
    • 注意,一定要有return,哪怕return value,不然数据直接整没有
  • n可以是字符串也可以是数字(0~10,超过10,转成10),在浏览器查看时,填充在json数据的每个键值对前面,字符串的话(填充相应的字符串),数字的话(填充n个空格)

解析

JSON.parse(josn,callback)
  • json为一个JOSN数据
  • callback是处理数据的过滤器(同上)(还原函数)

JOSN数据函数

toJSON:function(){
    let obj = this;
    return obj;
}
  • 这个函数被放在JSON数据里面,用来预处理数据
  • 注意不要用箭头函数,全局作用域会让你的this醉酒

序列化流程

  1. 先执行toJSON()
  2. 执行stringify()中的替换函数(第二个实参如果有的话)
  3. 执行stringify()中的缩进(第三个实参如果有的话)

代码案例

const json = {
    "name":"gjk",
    "age":20,
    "girlfriend":undefined,
    "date":new date(2023,8,21),
    toJSON:function(){
        let obj = this;
        obj.girlfriend = "lzy";
        return obj;
    }
};
const jsonText = JOSN.stringify(json,(key,value)=>{
    if(key==="age"){
        return ++value;
    }
    return value;
},4);
console.log(jsonText);
//{
//    "name": "gjk",
//    "age": 21,
//    "girlfriend": "lzy",
//    "date": "2017-01-31T16:00:00.000Z"
//}
const data = JSON.parse(josnText,(key,value)=>{
    if(key==="date"){
        return new Date(value);
    }
    return value;
}):
console.log(data.date.getFullYear());//2023
  1. 键值为undefined的话,序列化的时候会被忽略,(这个案例中,用toJSON函数重新赋值了)
  2. 利用还原函数,实现了Date对象的序列化和解析的过程
  3. stringify()的第三个参数,实现了每层级四个空格缩进