zoukankan      html  css  js  c++  java
  • JSON

    曾经,XML是传输结构化数据的标准。后来JSON出现,干掉了他。就是这么一个cool guy,能不学吗? 〒▽〒

    JSON是一种数据格式,不是编程语言。因此,并不是只有JS才使用JSON,JSON只是JS语法的一个子集。

    一、JSON的语法

    JSON的语法可以表示三种类型的值:简单值、对象和数组。

    1、简单值

    简单值可以是字符串、数值、布尔值和null,但是JSON不支持undefined。

    JS表示字符串可以用单引号,也可以用双引号,但是JSON表示字符串只能用双引号,单引号会导致语法错误。

    ⊙﹏⊙|||    大佬还挑食,唉,没办法,大佬就得宠着啊  ⊙﹏⊙|||

    2、对象

    JS中对象的字面量创建法的标准格式是这么写的:

    var person={
        name:'Alice',
        age:18
    };

    但是JSON大佬表示一个对象,他要求,对象的属性必须加上双引号,表示字符串的时候也必须用双引号,同时结束的时候不准有分号

    {
        "name":"Alice",
        "age":18
    }

    好吧,JSON虽然事,但是他有一个好处,就是JSON可以在对象中嵌套对象

    {
    "name":"Alice",
    "age":18,
    "shool":{
    "name":"一中",
    "location":"B612星球"
    }
    }

    3、数组

    跟JS的数组表达格式一样,但是,把数组和对象结合起来,就会构成更复杂的数据集合了。

    [
        {
            "book":"不想学习",
            "authors":[
                "王大锤","王花花"
            ],
            "year":"2019"
        },
        {
            "book":"偶尔也不想活着",
            "authors":[
                "抑郁","没精神"
            ],
            "year":"2019"
        },
    ]

    二、JSON的解析与序列化

    JSON能当大佬的原因是,可以把JSON数据结构解析为有用的JS对象,方法简单。

    1、解析

    由于JSON是JS语法的一个子集,所以eval()函数就可以解析JSON。

    ES5对解析JSON的行为进行了规范,定义了全局对象JSON。该对象有两个方法,stringify()和parse(),前者将JS对象序列化为JSON字符串,后者把JSON字符串解析为原生JS值

    stringify在将对象序列化为字符串的时候,会跳过值为undefined的属性。

    var books= [
        {
            "book":"不想学习",
            "authors":[
                "王大锤","王花花"
            ],
            "year":"2019"
        },
        {
            "book":"偶尔也不想活着",
            "authors":[
                "抑郁","没精神"
            ],
            "year":"2019"
        },
    ];
    var jsonTxt=JSON.stringify(books);
    console.log("jsonTxt-->"+jsonTxt);
    //jsonTxt-->[{"book":"不想学习","authors":["王大锤","王花花"],"year":"2019"},{"book":"偶尔也不想活着","authors":["抑郁","没精神"],"year":"2019"}]

    parse()方法在把JSON字符串转化为JS值的时候,如果传给JSON.parse()方法的字符串不是有效的JSON,该方法会抛出错误,比如这样:“Unexpected token 单 in JSON at position 0”,这里我故意用单引号包裹一个字符串传给parese()方法,他就给我报错了。

    var bookCopy=JSON.parse(jsonTxt);
    console.log("bookCopy-->"+bookCopy);//bookCopy-->[object Object],[object Object]

    三、JSON的序列化stringify()

    JSON.stringify()方法可以接收两个参数。第一个参数是过滤器,它的语法可以是数组,也可是是函数。第二个参数是保留缩进的选项,该参数可以是数据,也可以是字符串,但无论是哪个,都不能超过10.保留缩进选项的作用就是:让对象看起来方便,提高可读性。

    (1)过滤器参数为数组

    当过滤器参数是数组的时候,则JSON.stringify()对象是筛选出数组中指出的属性。

    var books= [
        {
            "book":"不想学习",
            "authors":[
                "王大锤","王花花"
            ],
            "year":"2019"
        },
        {
            "book":"偶尔也不想活着",
            "authors":[
                "抑郁","没精神"
            ],
            "year":"2019"
        },
    ];
    var jsonTxt=JSON.stringify(books,["authors",'year']);
    console.log("jsonTxt-->"+jsonTxt);
    //jsonTxt-->[{"authors":["王大锤","王花花"],"year":"2019"},{"authors":["抑郁","没精神"],"year":"2019"}]

    (2)过滤器参数为函数

    过滤器参数为函数时,该函数会接收两个参数,键名和属性值。这个函数叫做过滤函数(repalcer)。

    键名只能是字符串,如果值并非键值对儿结构的值,键名可以是空字符串。

    键名用来选择如何处理对象中的属性。

    该方法可以用来修改属性的值,如果属性值为undefined,会跳过该属性,所以可以用该方法来删除属性。

    var jsonTxt=JSON.stringify(books,function(key,value){
        switch(key){        
            case "authors":
            return value.join('&');
            case "year":
            return 5000;//修改了year的值
            case "edition":
            return undefined;//通过设置undifined关键字删除该属性
             default://default项是必须要提供的项目
            return value;
        }
    });
    console.log("jsonTxt-->"+jsonTxt);
    //jsonTxt-->[{"book":"不想学习","authors":"王大锤&王花花","year":5000},{"book":"偶尔也不想活着","authors":"抑郁,没精神","year":5000}]

    (3)保留缩进选项为数值

    数值不能超过10.超过了就按10来算。

    (4)保留缩进选项为字符串

    字符串长度不能超过10,超过了就按10来算。对象里面的对象,他前面的字符串长度会累加。

    var jsonTxt=JSON.stringify(books,function(key,value){
        switch(key){        
            case "authors":
            return value.join('&');
            case "year":
            return 5000;//修改了year的值
            case "edition":
            return undefined;//通过设置undifined关键字删除该属性
             default://default项是必须要提供的项目
            return value;
        }
    },"--");
    console.log("jsonTxt-->"+jsonTxt);
    jsonTxt-->[
    --{
    ----"book": "不想学习",
    ----"authors": "王大锤&王花花",
    ----"year": 5000
    --},
    --{
    ----"book": "偶尔也不想活着",
    ----"authors": "抑郁&没精神",
    ----"year": 5000
    --}
    ]

    对象这样读起来就不是一行了,读起来很方便。

    四、解析选项JSON.parse()方法

    JSON.parse()方法也可以接收一个参数,该参数是一个函数,在每个键值对儿上调用,这个函数名字叫做还原函数(reviver)。

    这个函数也是接收两个参数,一个键,一个值,而且都需要返回一个值。

  • 相关阅读:
    机器学习——朴素贝叶斯
    机器学习——决策树
    机器学习——线性回归
    机器学习——KNN
    机器学习——数据预处理
    爬虫——scrapy入门
    爬虫——生产者消费者
    想写篇技术性散文
    (景德镇)麻将规则服务描述
    Visual Studio 2013环境下操作vc6/vc7/vc8等低版本平台项目【编译|生成|调试】
  • 原文地址:https://www.cnblogs.com/qingshanyici/p/10575081.html
Copyright © 2011-2022 走看看