• JavaScript高级编程———JSON


    JavaScript高级编程———JSON

    < script >
    /*JSON的语法可以表达一下三种类型的值
            简单值:使用与javas相同的语法,可以在JSON中表达字符串、数值、布尔值和null,但JSON不支持javascript中的特殊值undefined
            对象:对象作为一种复杂数据类型,表示的是一组无序的键值对,而每个键值对中的值可以是简单值,也可以是复杂数据类型的值
            数组: 数组也是一种复杂数据类型,表示一组有序的值的列表,可以通过数值索引来访问其中的值,数值的值也可以是任意类型——简单值、对象、数组
            */
    //javascript中的对象字面量
    var person = {
        name: "Nicholas",
        age: 29
    };
    //JSON的对象字面量,其次JSON的末尾是没有分号,对象属性必须加双引号,这是JSON中是必需的,属性的值可以是简单值,也可以是复杂类型值
    var object = {
        "name": "Nicholas",
        "age": 29,
        "school": {
            "name": "Merrimack College",
            "location": "North Andover, MA"
        },
    
    };
    /*数组:JSON中的第二种复杂数据类型是数组,JSON数组采用的就是JavaScript中的数组字面量形式*/
    //javascript中的数组字面量
    var values = [26, "hi", true];
    
    //JSON的数组也没有变量和分号,把数组和对象结合起来,可以构成更复杂的数据集合
    [{
        "title": "Professional JavaScript",
        "authors": ["Nicholas C. Zakas"],
        "edition": 3,
        "year": 2011
    },
    {
        "title": "Professional JavaScript",
        "authors": ["Nicholas C. Zakas"],
        "edition": 2,
        "year": 2009
    },
    {
        "title": "Professional Ajax",
        "authors": ["Nicholas C. Zakas", "Jeremy McPeak", "Joe Fawcett"],
        "edition": 2,
        "year": 2008
    },
    {
        "title": "Professional Ajax",
        "authors": ["Nicholas C. Zakas", "Jeremy McPeak", "Joe Fawcett"],
        "edition": 1,
        "year": 2007
    },
    {
        "title": "Professional JavaScript",
        "authors": ["Nicholas C. Zakas"],
        "edition": 1,
        "year": 2006
    }]
    
    /*早期JSON对象基本上市javascript的eval()函数
              JSON对象有两个方法:stringify()、parse,在最简单的情况下,这两个方法分别用于
              把javascript对象序列化为JSON字符串和把JSON字符串解析为原生javascript值
            */
    var book = {
        title: "Professional Javascript",
        authors: ["Nicholas"],
        edition: 3,
        year: 2011,
        //toJSON: function () {
        //    return this.title;
        //},
        releaseDate: new Date(2019, 04, 28)
    };
    //使用JSON.stringify()将一个javascript对象序列化为一个JSON字符串,然后将它保存在jsonText中
    var jsonText = JSON.stringify(book);
    //将JSON字符串直接传递给JSON.parse()就可以得到相应的javascript值
    var jsonParse = JSON.parse(jsonText);
    console.log(jsonText);
    console.log(jsonParse);
    
    /*序列化选项:实际上,JSON.stringify()除了序列化的javascript对象外,还可以接收另外两个参数,
              这两个参数用于指定以不同的方式序列化javascript对象,第一个参数是过滤器,可以是一个数组,
              也可以是一个函数,第二个参数是一个选项,表示是否在JSON字符串中保留缩进
            */
    
    //过滤结果(这个属性与将要序列化的对象中的属性是对应的,因此在返回的结果字符串中,就只会包含这两个属性)
    var jsonT = JSON.stringify(book, ["title", "edition"]);
    console.log(jsonT);
    //如果键为 "year" ,则将其值设置为 5000 ;如果键为 "edition" ,通过返回 undefined 删除该属性。
    //最后,一定要提供 default 项,此时返回传入的值,以便其他值都能正常出现在结果中
    var jsontarget = JSON.stringify(book,
    function(key, value) {
        switch (key) {
        case "authors":
            return value.join(",")
        case "year":
            return 5000;
        case "edition":
            return undefined;
        default:
            return value;
        }
    });
    console.log(jsontarget);
    
    //字符串缩进:JSON.stringify()方法的第三个参数用于空值结果中的缩进和空白符,如果这个参数是一个值,那它表示的是每个级别缩进的空格数
    var jsontrim = JSON.stringify(book, null, 4);
    console.log(jsontrim);
    
    /*toJSON() 方法可以将 Date 对象转换为字符串,并格式化为 JSON 数据格式。JSON 数据用同样的格式就像x ISO-8601 标准: YYYY-MM-DDTHH:mm:ss.sssZ
                如果存在 toJSON() 方法而且能通过它取得有效的值,则调用该方法。否则,返回对象本身
            */
    
    /*解析选项 先是为 book 对象新增了一个 releaseDate 属性,该属性保存着一个 Date 对象。
            这个对象在经过序列化之后变成了有效的 JSON 字符串,然后经过解析又在 bookCopy 中还原为一个 Date对象。
            还原函数在遇到 "releaseDate" 键时,会基于相应的值创建一个新的 Date 对象。
            结果就是bookCopy.releaseDate 属性中会保存一个 Date 对象。正因为如此,才能基于这个对象调用getFullYear() 方法。
            */
    var bookCopy = JSON.parse(jsonText,
    function(key, value) {
        if (key == "releaseDate") {
            return new Date(value);
        } else {
            return value;
        }
    });
    alert(bookCopy.releaseDate.getFullYear());
    < /script>/

      

    生命中最值得欣慰的,莫过于一觉醒来,你还在身旁
  • 相关阅读:
    35 个手机和Web应用开发图标集
    20个创意404错误页面设计的启示
    31个不同种类的网站免费滑块巨大集合(PSD文件)
    18个伟大的搜索引擎设计者能够找到高品质的免费图标
    50 个独家免费图标集下载
    C语言对结构体何时用> , 何时用.
    GNU make manual 翻译(一)
    PostgreSQL 的 语法分析调用关系
    GNU make manual 翻译(二)
    PostgreSQL 的 target_list分析(七)
  • 原文地址:https://www.cnblogs.com/chaonuanxi/p/10785596.html
Copyright © 2020-2023  润新知