zoukankan      html  css  js  c++  java
  • JSON解析与序列化

    # JSON是一种不仅限于JavaScript的数据格式

    JSON语法:

    JSON语法可以表示一下三种类型的值。

      简单值:字符串、数值、布尔值、null,不支持undefined。

        JSON格式:1、"hello"

      对象:值可以是简单值或复杂的对象值。

        JSON格式:  

    {
       "name": "Rose",
        "age": 25
    }
    //和对象字面量形式不同的是:JSON对象没有声明变量、属性名必须加“”(双引号)且末尾没有分号

      数组:值可以是任意类型。

        JSON格式:

    [
      {
      "name":"student1",
      "age": 11
      },
      {
      "name":"student2",
      "age": 12
      }
    ]

    JSON解析与序列化

    1、JSONstringify()的使用 :过滤器、字符串缩进和toJSON()方法

    2、解析JSON.parse()方法

     //定义一个对象
        var person = {
            name: "nikol",
            age: "26",
            gender: "male",
            city: "tokyo",
            girlFriend: undefined
        }
    
        /*
        * 1、对象转换成JSON字符串
        */
        var jsonText1 = JSON.stringify(person);
        // alert(jsonText1);//忽略值为undefined 的 girlFirend属性
    
        /*
        * 1.1、stringif()过滤器作用 (两个参数)
        *   例如:提取obj对象中的attr属性
        *   语法:JSON0stringif(obj, ["attr1", "attr2",...])
        *   第二个参数为一个字符串数组,它包含一个或多个对象属性字符串。
        */
        var jsonText11 = JSON.stringify(person, ["name", "age"]);
        // alert(jsonText11);//{"name":"nikol","age":"26"}
        //同样忽略值为undefined的属性
        var jsonText111 = JSON.stringify(person, ["name", "age","girlFirend"]);
        // alert(jsonText111);
    
        /*
        * (自定义过滤)自定义对象序列化后的值(两个参数)
        * 例如:改变name和age属性的值分别为 "jso"和"undefined"
        * 语法: JSON.stringify(obj, function (key, value) {
                    switch (key) {
                        case "name":
                            return "jso";
                        case "age":
                            return "undefined";
                        default:
                            return value;
                    }
                });
        */
        var jsonText112 = JSON.stringify(person, function (key, value) {
                        switch (key) {
                            case "name":
                                return "jso";
                            case "age":
                                return "undefined";
                            default:
                                return value;
                        }
                    });
        // alert(jsonText112);//{"name":"jso","age":"undefined","gender":"male","city":"tokyo"}
    
        /*
        * 1.2、字符串缩进(三个参数)
        * 第二个参数为null,第三个参数代表缩进的空格数,或者字符串
        */
        //每级缩进4个空格(最大为10,超过10都自动转换为10)
        var jsonText12 = JSON.stringify(person,null,4);
        // alert(jsonText12);
    
        //以"--"代替缩进空格
        var jsonText121 = JSON.stringify(person,null,"--");
        // alert(jsonText121);
    
        /*
        * 1.3、toJson()方法
        * 内部调用顺序: 1 --> 2 --> 3
        *   (1)、有toJSON()调用toJSON()没有则返回对象本身
        *   (2)、如果是两个参数的过滤器,则先过滤后再应用(1) (过滤器接收的值是(1)的返回值),
        *       然后再对这个(1)的返回值进行序列
        *   (3)、如果提供三个参数,则按照三个参数来进行对应的序列化;
        */
        /*
        * 测试 toJSON()方法
        */
        var obj = {
            title: "this is a title ",
            paragraph: "this is paragraph ",
        }
    
        var obj1 = {
            title: "this is a title 1",
            paragraph: "this is paragraph 1",
            toJSON: function () {
                return this.title;
            }
        }
        
        //测试(1)
        var objJson = JSON.stringify(obj);
        var obj1Json = JSON.stringify(obj1);
        // alert(objJson); //{"title":"this is a title ","paragraph":"this is paragraph "} 返回对象本身
        // alert(obj1Json);//"this is a title 1"   优先调用toJSON()方法
    
        //测试(2) 过滤器  
        var objFilter = JSON.stringify(obj, ["paragraph"])
        // alert(objFilter);//{"paragraph":"this is paragraph "} 正常过滤
    
        var obj1Filter = JSON.stringify(obj1, ["paragraph"]);
        // alert(obj1Filter);//"this is a title 1" 调用toJSON()
    
        //测试(3)
        var obj3Filter = JSON.stringify(obj1, null, "--");
        var obj31Filter = JSON.stringify(obj1, null, 4);
        // alert(obj3Filter);//"this is a title 1"  调用toJSON()
        // alert(obj31Filter);//"this is a title 1"  调用toJSON()    
    
        /*
        * 1.3 解析 JSON.parse()
        */
        var objJstr = JSON.stringify(obj);
    
        var objJparse = JSON.parse(objJstr, function (key, value) {
            if (key == "title") {
                return "我准备改变title";
            } else {
                return value;
            }
        });
        // alert(objJparse);
        // alert(objJparse.title);
  • 相关阅读:
    jekyll+livereload+chrome插件-更新文件后自动刷新
    boostraps+jekyll+sass/scss+less+grunt整合使用详细备忘
    Centos使用keepalived配置MySQL双主热备集群
    MySQL数据库的集群方案
    Nginx使用Lua脚本加解密RSA字符串
    Nginx使用Lua脚本连接Redis验证身份并下载文件
    Centos安装ELK
    Centos7中搭建Redis6集群操作步骤
    only-office以Docker方式安装使用
    Kafka笔记
  • 原文地址:https://www.cnblogs.com/suiucat/p/9750371.html
Copyright © 2011-2022 走看看