美文网首页
【JavaScript高级教程】笔记-JSON篇

【JavaScript高级教程】笔记-JSON篇

作者: x8q7 | 来源:发表于2020-04-10 22:39 被阅读0次

    【JavaScript高级教程】笔记-JSON篇

    JavaScript Object Notation, Javascript 对象表示法

    注:JSON是一种数据格式,不是一种编程语言。

    1.语法

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

    • 简单值:字符串,数值,布尔值,null。不支持 undefined
    • 对象:与JavaScript中对象相近,简单或者复杂键值对形式,但是,key 必须用双引号。
    • 数组:与JavaScript中数组相近,值或者对象的有序列表。

    注:JSON不支持变量,函数,对象实例。

    1.简单值的JSON形式

    数值: 5
    字符串: "hello world!"
    布尔值: 布尔值
    null: null
    

    2.对象的JSON形式

    {
        "name": "nike",
        "age": 29
    }
    
    注:不要写成 单引号。
    

    3.数组的JSON形式

    [25, "hi", true]
    
    也可以是复杂的数组形式,内部值为数组或者对象。
    

    2.解析与序列化

    1.序列化

    JSON.stringify(obj[,filter,indentation])
    
    1.参数
    obj:要序列化的JavaScript对象;
    
    filter:可以是数组形式,也可以是函数;
    
    1.数组形式:JSON.stringify()的结果只包含数组中列出的属性。
    eg:
    var book = {
        "title":"Professional Javascript",
        "authors": [
            "Nicholas C. Zakas"
        ],
        edition: 3,
        year: 2011
    }
    
    var jsonText = JSON.stringify(book, ["title", "edition"]);
    
    2.函数形式:函数接收两个参数,key和value。函数返回值就是相应键的值。
    注:如果返回undefined,则对应的属性被忽略。
    var book = {
        "title":"Professional Javascript",
        "authors": [
            "Nicholas C. Zakas"
        ],
        edition: 3,
        year: 2011
    }
    
    var jsonText = JSON.stringify(book, function(key, value){
        switch(key){
            case "authors":
                return value.join(",");
            
            case "year":
                return 5000;
            
            case "eiditon":
                return undefined;
            
            default:
                return value;
        }
    })
    
    indentation: 控制结果中的缩进和空白符。
    注:最大缩进为10,大于10会自动转化为10。
    
    也可以使用制表符或者任意字符,用来填充。
    
    2.toJSON方法
    var book = {
        "title":"Professional Javascript",
        "authors": [
            "Nicholas C. Zakas"
        ],
        edition: 3,
        year: 2011,
        toJSON: function(){
            return this.title
        }
    }
    
    var jsonText = JSON.stringify(book); //"Professional Javascript"
    
    相当于复写了内部方法。
    
    3.序列化顺序
    1.如果存在toJSON方法且能通过他取得有效值,则调用该方法,否则,返回对象本身;
    2.如果提供了参数二,则进行过滤。传入过滤器的值,是第一步返回的值;
    3.对第二步返回的值进行序列化;
    4.如果提供了参数三,则进行相应格式化;
    
    注:个人理解像递归函数。
    

    2.解析

    JSON.stringify(obj[,reviver])
    
    1.参数
    obj:要解析的JavaScript对象;
    
    reviver: 还原函数;
    注:如果还原函数返回undefined,则从结果中删除相应的key;如果返回其他值,则正常解析;
    
    eg:
    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;
        }
    });
    
    

    相关文章

      网友评论

          本文标题:【JavaScript高级教程】笔记-JSON篇

          本文链接:https://www.haomeiwen.com/subject/sfvjmhtx.html