JS高级程序设计20-JSON

  • 语法

    JSON的语法可以表示以下三种类型的值:

    //简单值:
    使用与JS相同的语法,可以在JSON中表示字符串、数值、布尔值和null。但JSON不支持JS中的特殊值undefined//对象:
    对象作为一种复杂数据类型,表示的是一组有序的键值对,而每个键值对中的值可以是简单值,也可以是复杂数据类型的值;
    //数组:
    数组也是一种复杂数据类型,表示一组有序的值的列表,可以通过数值索引来访问其中的值。数组的值也可以是任意类型--简单值、对象或数组;

    简单值

    JS字符与JSON字符最大的区别在于,JSON字符必须使用双引号

    对象

    //JS的对象字面量
    var person={ 
        name="Nicholas",
        age:29
    };
    //JSON对象
    {
        "name":"Nicholas",
        "age":29,
        "school":{ 
            "name":"Merrimack College",
            "location":"North Andover,MA"
        }
    }
    //区别
    没有声明变量(JSON中没有变量的概念)
    没有末尾的分号
    对象的属性必须加双引号

    数组

    //JS中的数组字面量
    var values=[25,"hi",true];
    //JSON中的数组
    [25,"hi",true]
  • 解析与序列化

    JSON对象

    stringify()//将JS对象序列化为JSON字符串;
    parse()//把JSON字符串解析为原生JS值;
    //在序列化JS对象时,所有函数和圆形成员都会被有意忽略,不体现在结果中,值为undefined的任何属性也会被跳过;

    序列化选项

    JSON.stringify()除了要序列化JS对象外,还可以接受两个参数,第一个参数是过滤器(可以是数组,也可以是函数),第二个参数是一个选择项,表示是否在JSON字符串中保留缩进
    
    //过滤结果
    var book{
        "title":"Professional JavaScript",
        "authors":["Nicholas C.Zakas"],
        edition:3;
        year:2011
    };
    var jsonText=JSON.stringify(book,["title","edition"]);//第二个参数是数组
    var jsonText=JSON.stringify(book,function(key,value){//第二个参数是函数
        switch(key){ 
            case "authors":
                return value.join(",")
            cae "year":
                return 5000;
            case "edition"
                return undefined;
            default:
                return value;
        }
    });
    
    //字符串缩进
    var jsonText=JSON.stringify(book,null,4);
    var jsonText=JSON.stringify(book,null,"--");
    
    //toJSON()方法
    var book{
        "title":"Professional JavaScript",
        "authors":["Nicholas C.Zakas"],
        edition:3;
        year:2011,
            toJSON:function(){ 
                return this.title;
            }
    };
    var jsonText=JSON.stringify(book);
    //通过对象上调用toJSON()方法,返回其自身的JSON数据格式

    解析选项

    JSON.parse()方法可以接受一个函数参数:
    var book{
            "title":"Professional JavaScript",
            "authors":["Nicholas C.Zakas"],
            edition:3;
            year:2011,
            releaseDate:new Date(2011,11,1)
        };
        var jsonText=JSON.stringify(book);
        var bookCopy=JSON.parse(jsonText,function(key,value){ 
            if(key=="releaseDate"){ 
                return new Date(value),
            }else{ 
                return value;
            }
        });
        alert(bookCopy.releaseDate.getFullYear());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值