zoukankan      html  css  js  c++  java
  • js之数据类型(对象类型——单体内置对象——JSON)

      JSON(Java Script Object Notation)使用JavaScript语法,是用于存储和传输数据的格式,通常用于服务端向网页传递数据。JSON格式仅仅是一个文本,文本可以被任何编程语言读取及作为数据格式传递(一种类似js中的对象格式的字符串,json它是一个字符串,只不过长的像对象)从上面的描述中我们可以看到如下知识

      JSON的规则:数据放在了一对引号当中,用{}或者是[]括起来;里面的每一个数据都是以键值对表示(key:value);key必须放双引号,单引号不行:每个数据之间用逗号隔开.

      JSON的用途:用于js与后端进行数据的交互

      JSON属性值:只能是10进制数值,字符串(双引号),布尔值和null,数组,符合JSON要求的对象(言外之意是不能为函数,NaN,+(-)Infinity和undefined)。

    <script>
        //json的数组格式
        var arr = ['davina', 'amy', 'lisa']; //存储字符串的数组
        console.log(arr[2]);//lisa
    
        var arr1 = [arr,
            {
                "name": "dvaina",
                "age": 18
            },
            {
                "name": "lisa",
                "age": 20
            }]
        console.log(typeof arr1, arr1[2].name); //object lisa
    </script>

      JSON对象的方法:stringify()和parse().

      JSON.stringify()方法将一个对象转成JSON格式的字符串,如果对象中的key没有加引号,也是可以转换的,转换后的结果会自动给它加上引号。

      一个参数的情况:

    <script>
    
        var obj1 = [1, 2, 3];
        var obj2 = { "name": 'dvaina', "age": '20' };
        var obj3 = { name: 'lisa', "age": '20' };
        console.log(JSON.stringify(obj1));  //[1,2,3]
        console.log(JSON.stringify(obj2)); //{"name":"dvaina","age":"20"}
        console.log(JSON.stringify(obj3)); //{"name":"lisa","age":"20"}
    
        //stringify()方法把数学对象转换成字对象的字符串形式
        console.log(JSON.stringify(Math)); //{}
        console.log(JSON.stringify(new Boolean(true))); //true
        //stringify()方法把日期对象转换成字符串
        console.log(JSON.stringify(new Date())); //"2019-12-09T06:22:34.685Z"
    
        //转换中,如果对象成员是undefined或函数,成员会忽略
        //如果数组的成员是undefined或者函数,则值会转成null
        obj4 = {
            a: function () { },
            b: undefined,
            c: [function () { }, undefined],
        }
        console.log(JSON.stringify(obj4)); //{"c":[null,null]}
    </script>

      第二个参数也可以是一个函数或数组

        <script>
            //如果第二个参数是函数,序列化过程中的每个属性都会被这个函数转化和处理
            var str = {
                "name": "davina",
                "age": 18,
                "phone": 11111111
            }
            var jsonStr = JSON.stringify(str, function (key, value) {
                if (key == "phone") {
                    return "(0713)" + value;
                } else if (typeof value === "age") {
                    return value + 2;
                } else {
                    return value;
                }
            })
            console.log(jsonStr)  //{"name":"davina","age":18,"phone":"(0713)11111111"}
            //如果是数组,那只有包含在这个数组中的属性才会被序列化到json字符串中
            var str1 = {
                "name": "davina",
                "age": 18,
                "phone": 11111111
            }
            var jsonStr1=JSON.stringify(str1,["name","age","phone","address"]);
            console.log(jsonStr1); //{"name":"davina","age":18,"phone":11111111}
         //如果是null,那和空一样
        </script>

      第三个参数用于美化输出——

      JSON.parse()将字符串转化成对象,如果传入的不是有效JSON格式,会报错。JSON.parse()也可以接收一个函数参数,在每个键值对上调用,这个函数被称为还原函数,该函数接收两个参数,一个键和一个值。如果还原函数返回undefined,那就要从结果中删除相应的键,如果返回其它值,则将值插入到结果中。

        <script>
            console.log(JSON.parse('{}'));  //{}
            console.log(JSON.parse('true'));  //true
            var o = JSON.parse('{"name":"davina"}');
            console.log(o.name); //dvaina
            //JSON.parse()也可以接收一个函数参数,在每一个键值对调用,这个函数被称为还原函数,这个函数接收两个参数,一个键和一个值,返回一个值
    
            var book = {
                "name": "js",
                "date": new Date(2019, 9, 1)
            }
            var jsonStr = JSON.stringify(book);
            
            console.log(jsonStr)//{"name":"js","date":"2019-09-30T16:00:00.000Z"}
    
            var bookName = JSON.parse(jsonStr, function (key, value) {
                if (key == 'date') {
                    return new Date(value);
                }
                return value;
            })
            console.log(bookName.date.getFullYear());//2019
        </script>

      eval()类似于JSON.parse()方法,可以将json字符串转换成json对象,但是它也可以执行不符合json格式的代码,所以尽量少用或不用。

     

  • 相关阅读:
    Kafka调试入门(一)
    java笔记十五——多线程
    java笔记十四——初始集合源码
    java笔记十二——集合总结
    java笔记十一——异常
    java笔记十——大数类和日期类
    java笔记九——Object类与String类
    java笔记八——面向对象(三)
    java笔记七——面向对象(二)
    java笔记六——面向对象(一)
  • 原文地址:https://www.cnblogs.com/davina123/p/11929103.html
Copyright © 2011-2022 走看看