zoukankan      html  css  js  c++  java
  • 深入理解javascript中的JSON

    首先注明写这篇博文的原因是看了一篇文章,比较喜欢博主的风格。

    从三个部分聊聊,JSON的定义,js对象和JSON,js中JSON的函数。

    1.JSON的定义

    官网给出的解释是:一种轻量级的数据交换格式。相比于xml格式,占据更小的宽带。
    <person><name>二百六</name><height>160</height><weight>60</weight></person>
    {"name":"二百六","height":160,"weight":60}
    JSON基于两种结构
    “键/值”:key: value,在js中理解为对象,以“{”“}”开头和结束
    值的有序列表:数组,以“[”“]”开头和结束
    
    JSON的值
    1.可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。//注意没有undefined
    2.undefined、任意的函数(除去toJSON函数之外)以及 symbol 值(symbol详见ES6对symbol的介绍)
    (1)出现在非数组对象的属性值中:在序列化过程中会被忽略
    (2)出现在数组中时:被转换成 null
    3.布尔值,数字,字符串会自动转化为对应的原始值。new String('hello') => 'hello',welcome+123 => 'welcome123'。
    4.键名不是双引号的(包括没有引号或有单引号),会自动变为双引号,字符串是单引号的,会自动变为双引号。
    5.最后一个属性后面有逗号的,会被自动去掉。
    var friend={
        firstName: 'Good',
        'lastName': 'Man',
        'address': undefined,
        'phone': ["1234567",undefined],
        'fullName': function(){
            return this.firstName + ' ' + this.lastName;
        },
    };
    JSON.stringify(friend);
    "{"firstName":"Good","lastName":"Man","phone":["1234567",null]}"
    
    另外函数名称变为toJSON:
    var info={  
        "msg":"I Love You",
        "toJSON":function(){
            var replaceMsg="Go Die";
            return replaceMsg;
        }
    };
    JSON.stringify(info);  
    ""Go Die""

    2.js对象和JSON

    本质不同的东西,就好比“斑马”和“斑马线”,斑马线是基于斑马命名的;
    JSON(JavaScript Object Notation)即Javascript对象符号,JSON的语法是基于js对象的;
    斑马线是非生物,好比JSON是一种数据格式;而斑马是活的,js对象是一个实例,存在与内存的一个东西。
    JSON是可以传输的,因为它是文本格式,js对象没办法传输;
    语法上JSON更为严格。

    3.js中JSON的函数

    JSON.stringify(value[, replacer [, space]]) 
    第一个参数,传入一个JSON格式的js对象或数组,
    第二个参数,可以是函数,也可以是数组。若不想设置第二个参数,只想设置第三个参数时,第二个参数设置为null,示例如下:
    1.第二个参数为函数时:
    var friend={  
        "firstName": "Good",
        "lastName": "Man",
        "phone":"1234567",
        "age":18
    };
    
    var friendAfter=JSON.stringify(friend,function(key,value){  
        if(key==="phone")
            return "(000)"+value;
        else if(typeof value === "number")
            return value + 10;
        else
            return value; //如果你把这个else分句删除,那么结果会是undefined
    });
    
    console.log(friendAfter);  
    //输出:{"firstName":"Good","lastName":"Man","phone":"(000)1234567","age":28}
    
    
    2.第二个参数为数组时:
    var friend={  
        "firstName": "Good",
        "lastName": "Man",
        "phone":"1234567",
        "age":18
    };
    
    //注意下面的数组有一个值并不是上面对象的任何一个属性名
    var friendAfter=JSON.stringify(friend,["firstName","address","phone"]);
    
    console.log(friendAfter);  
    //{"firstName":"Good","phone":"1234567"}
    //指定的“address”由于没有在原来的对象中找到而被忽略
    
    第三个参数,用于美化输出——不建议用
    取值如果是1-10的数字时,代表几个空格,
    字符串时用字符取代空格,最多取前10个字符,
    没有提供或为null时,为默认
    var friend={  
        "firstName": "Good",
        "lastName": "Man",
        "phone":{"home":"1234567","work":"7654321"}
    };
    //直接转化是这样的:
    //{"firstName":"Good","lastName":"Man","phone":{"home":"1234567","work":"7654321"}}
    
    情况1:
    JSON.stringify(friend,null,4);  
    输出:
    {
        "firstName": "Good",
        "lastName": "Man",
        "phone": {
            "home": "1234567",
            "work": "7654321"
        }
    }
    
    情况2:
    JSON.stringify(friend,null,"HAHAHAHA");  
    输出:
    {
    HAHAHAHA"firstName": "Good",  
    HAHAHAHA"lastName": "Man",  
    HAHAHAHA"phone": {  
    HAHAHAHAHAHAHAHA"home": "1234567",  
    HAHAHAHAHAHAHAHA"work": "7654321"  
    HAHAHAHA}  
    }
    

      

      

      

      

      

      

      

      

  • 相关阅读:
    Python编程四大神兽:迭代器、生成器、闭包和装饰器
    Linux基础
    3.8记录
    3.7记录
    3.6进度记录
    3.5进度
    3.4进度
    3.3进度
    3.2进度记录
    3.1记录
  • 原文地址:https://www.cnblogs.com/lixuemin/p/6641220.html
Copyright © 2011-2022 走看看