zoukankan      html  css  js  c++  java
  • 高级程序设计(第3版)第二十章JSON /笔记

    JSON

    语法

    • 简单值
      • 字符串、数值、布尔值和 null
      • 不支持 JavaScript中的特殊值 undefined
    • 对象
      • JSON 中的对象要求给属性加双引号 (不可写成单引号)
      • 与 JavaScript的对象字面量相比:没有声明变量;没有末尾的分号
    {     
      "name": "Nicholas",
      "age": 29, 
      "school": { 
        "name": "Merrimack College", 
        "location": "North Andover, MA"
      }
    } 
    • 数组
      • 利用对象和数组能够创造出各种各样的数据结构
    [     
      {          
        "title": "Professional JavaScript",
        "authors": [ 
                 "Nicholas C. Zakas" 
        ], 
        edition: 3, 
        year: 2011 
      }, 
     ]

    解析与序列化

    • JSON对象
      • JavaScript的eval()函数可以解析、解释并返回 JavaScript对象和数组。
      • stringify():把 JavaScript对象序列化为 JSON字符串。
      • parse():把 JSON字符串解析为原生 JavaScript值。
    var book = {  
        title: "Professional JavaScript";
    }; 
    var jsonText = JSON.stringify(book); 
    • 序列化选项

    JSON.stringify()可以接收另外两个参数,这两个参数用于指定以不同的方式序列化 JavaScript 对象。

    第一个参数是个过滤器,可以是一个数组,也可 以是一个函数;第二个参数是一个选项,表示是否在 JSON字符串中保留缩进。

      • 过滤结果
        • 如果过滤器参数是数组,那么 JSON.stringify()的结果中将只包含数组中列出的属性
        • 如果第二个参数是函数,传入的函数接收两个参数,属性(键)名和属性值。
          • 根 据属性(键)名可以知道应该如何处理要序列化的对象中的属性(字符串)。
          • 为了改变序列化对象的结果,函数返回的值就是相应键的值。
    var jsonText = JSON.stringify(book, ["title", "edition"]); 
    {"title":"Professional JavaScript","edition":3} 
    
    var jsonText = JSON.stringify(book, function(key, value){
      switch(key){
        case "authors":
          return value.join(",") 
        case "year":  
          return 5000;
            default:
          return value;
      }
    }); 
    {"authors":"Nicholas C. Zakas","year":5000} 
      • 字符串缩进
        • var jsonText = JSON.stringify(book, null, 4); //在每个级别缩进 4个空格
        • 最大缩进空格数为 10,所有大于 10的值都会自动转换为 10
        • 如果缩进参数是一个字符串而非数值,则这个字符串将在 JSON字符串中被用作缩进字符
    var jsonText = JSON.stringify(book, null, " - -"); 
     这样,jsonText 中的字符串将变成如下所示: 
     
    { 
      --"title": "Professional JavaScript",
      --"authors": [
        ----"Nicholas C. Zakas"
      --]
    } 
    
    • toJSON()方法
      • 给对象定义 toJSON()方法,返回其自身的JSON数据格式
    • 假设把一个对象传 入 JSON.stringify(),序列化该对象的顺序如下。
      • (1) 如果存在 toJSON()方法而且能通过它取得有效的值,则调用该方法。否则,返回对象本身。
      • (2) 如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第(1)步返回的值。
      • (3) 对第(2)步返回的每个值进行相应的序列化。
      • (4) 如果提供了第三个参数,执行相应的格式化。

    解析选项

    • JSON.parse()方法也可以接收另一个参数,该参数是一个函数,将在每个键值对儿上调用。
    • 如果还原函数返回 undefined,则表示要从结果中删除相应的键;如果返回其他值,则将该值插 入到结果中
    var jsonText = JSON.stringify(book); 
    var bookCopy = JSON.parse(jsonText, function(key, value){
      if (key == "releaseDate"){
        return new Date(value); 
      } else {   
        return value;   
      } 
    }); 
     
    alert(bookCopy.releaseDate.getFullYear());
  • 相关阅读:
    监督学习——AdaBoost元算法提高分类性能
    监督学习——logistic进行二分类(python)
    监督学习——朴素贝叶斯分类理论与实践
    nrm 工具的使用
    Linux下安装MySQL
    Node环境配置
    07.移动端类库
    06.网页布局
    05.预处理器
    04.触屏事件
  • 原文地址:https://www.cnblogs.com/isremya/p/13387263.html
Copyright © 2011-2022 走看看