手写JSON.stringify和JSON.parse

window.JSON={
    parse:function(str){
        return eval('('+str+')');
    },
    stringify:function(str){
      
        if(typeof str=='number'){
            return  String(str)
        }
        if(typeof str=='string'){
            return str;
        }
        var s=''
        switch(Object.prototype.toString.call(str)){
            case '[object Array]' :
                s+="[";
                for(var i=0;i<str.length-1;i++){
                   
                    if(typeof str[i]=='string'){s+='"'+str[i]+'",'}else{
                    s+=str[i]+','}
                }
                if(typeof str[str.length-1]=='string'){s+='"'+str[i]+'"'}else{
                   if(str[str.length-1]==null){str[str.length-1]=null;
                   s+='null';
                   }else{
                    s+=(str[str.length-1]?str[str.length-1]:'')
                   }
                    }
                    s+="]"
            break;
            case '[object Date]':
           
                s+= '"' + (str.toJSON ? str.toJSON() : str.toString()) + '"';
                    break;

            case '[object Object]':
            s+='{'
                for(var key in str){
                   

                    if(str[key]===undefined){
                        continue;
                    }
                   if(str[key]===null){
                       s+='"'+key+'":'+str[key]+","
                       continue;
                   }
                   if(typeof str[key]=='symbol'||typeof str[key]=='function'){
                       continue;
                   }
                   if(Object.prototype.toString.call(str[key])=='[object RegExp]'){
                       continue
                   }

                   s+=('"'+key+'":"'+str[key]+'",')
                }
                s=s.slice(0,s.length-1)
                if(s==''){s+='{'}
            s+="}"
            break;
            case '[object Function]':
                s=undefined;
                break;
        }
        return s
    }
  
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值