JSON

作者: FF_C | 来源:发表于2018-01-02 20:43 被阅读0次

    开发人员觉得XML这种微型 的数据结构过于 烦琐 冗长,为了解决这个问题,JSON的结构化数据出现了。JSON是JavaScript的一个严格子集,利用Javascript中的一些模式来表示结构化数据 。
    JSON和XML类型,都是一种结构化的数据表示方式 ,所以,JSON并不是JavaSript独有的数据格式 ,其他很多语言都可以对JSON进行解析和序列化.

    JSON语法
    JSON的语法 可以表示三种类型的值 :
    1 简单值 :可以在JSON中表示字符串 数值 布尔值和null.但JSON不支持JavaScript中的特殊值undefined.
    2对象:顾名思义。
    3 数组:顾名思义。

    简单值
    100 "Lee"这两个量就是JSON的表示方法,一个是JSON数值 ,一个是JSON字符串。

    对象
    JavaScript对象字面量表示法:
    var box = {
    name:"Lee",
    age:100
    };

    而JSON中的对象表示法需要加上双引号,并且不存在赋值运算和分号:
    '{"name":"lee","age":100}'

    {
    "name":"lee",
    "age":100
    }

    普通数组的表现方式
    var box =[100,'lee',true];
    JSON数组
    [100,"lee",true]

    // ps:JSON说白了就是一个字符串,所以任何表示,都应该加上引号表示字符串。
    //PS JSON对象和数组比普通对象和数组,少了分号,少了变量赋值,而且本身应该是字符串表示。

    //最常用的JSON结构

    [
        {
           "titile":"a",
            "num":1
        },
        {
           "titile":"b",
            "num":1
        },
        {
           "titile":"c",
            "num":1
        }
    ]
    

    一般情况下,我们可以把JSON结构数据保存到一个文本文件 里,然后通过XMLHttpRequest对象去加载它,得到这串结构数据字符串(XMLHttpRequest对象以后讲解)。所以 我们可以模拟这种中

    模拟加载JSON文本文件的数据,并且赋值给变量。

    var box='[{"name":"a","age":1},{"name":"b","age":2}]';

    //PS 上面这段代码模拟了var box= load('demo.json')赋值过程 。因为通过load加载的文本文件 ,不管内容是什么 ,都必须是字符串。所以两边要加上双引号。

    其实JSON就是比普通数组多了两国宾双引号
    普通数组如下:
    var box =[{name:'a',age:1},{name:'b',age:2}];

    二 解析和序列化

    如果是载入的JSON文件 ,我们需要对其进行使用,那么就必须对JSON字符串解析成原生的JavaScript值 。当然如果是原生的JavaScript对象或数组 ,也可以转换成JSON字符串。

    对于讲JSON字符串解析成JavaScript原生值,早期采用的是eval()函数。但这种方法既不安全,可能会执行一些恶意代码 。因为通过load加载的文本文件

    var json ='[{"name":"a","age":1},{"name":"b","age":1}]';
    alert(box);   //JSON字符串
    var box = eval(json); //使用eval()函数解析
    alert(box);    //得到JavaScript原生值 
    alert(box[1].name);   //a
    
    

    ECMAScript5对解析JSON的行为进行规范,定义了全局对象JSON.
    JSON对象提供了两个方法,一个是将原生JavaScript值转为JSON字符串:stringfify(),里面可以传三个参数 ,第二个参数起过滤做用,可以是数组 可以是函数,第三个参数是缩进;另一个是将JSON字符串转换为Javascript原生值 :parse().

    var box ='[{"name":"a","age":1},{"name":"b","age":1}]';
    alet(box);
    var json=JSON.parse(box);
    alert(json)
    

    还有种过滤方式,使用toJSON()方法,可以将某一组对象 里指定返回某个值

    var box = [{name:'a',age:1,toJSON:function(){
        return this.name;
    }},[{name:'b',age:1,toJSON:function(){
        return this.name;
    }}]
    
    

    序列化也有执行顺序 ,首先执行toJSON()方法;如果应用 了第二个过滤参数,则执行这个方法;然后执行序列化过程 ,比如将键值对组成合法的JSON字符串,比发加上双引号。如果提供了缩进 ,再执行缩进操作。

    相关文章

      网友评论

        本文标题:JSON

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