JSON是一种数据格式,不是编程语言;
JSON.stringify();JSON.parese();
过滤函数;还原函数。

书摘&心得

  • JSON是一种数据格式,不是一种编程语言
  • JSON可以表示三种类型
    • 简单值
      • JSON 字符串必须使用双引号
    • 对象
      • 与javascript对象的区别
        • 没有声明变量
        • 没有末尾的分号
        • 对象的属性必须加双引号
    • 数组
      • 也没有变量和分号
  • 可以把JSON 数据结构解析为有用的 JavaScript 对象

    序列化

  • JSON 对象有两个方法:

    • stringify()
      • JavaScript->JSON
      • 把JavaScript 对象序列化为 JSON 字符串
      • 只保留有效JSON数据类型
        • 所有函数及原型成员都会被有意忽略,不体现在结果中。
        • 值为undefined 的任何属性也都会被跳过
    • parse()
      • JSON->JavaScript
      • 把 JSON 字符串解析为原生 JavaScript 值
      • 如果传给 JSON.parse()的字符串不是有效的 JSON,该方法会抛出错误

        序列化选项

        1、 stringify的过滤函数

        第二个参数是数组: ```javascript var book = { “title”: “Professional JavaScript”, “authors”: [ “Nicholas C. Zakas” ], edition: 3, year: 2011 }; // 在返回的结果字符串中,就只会包含这两个属性 var jsonText = JSON.stringify(book, [“title”, “edition”]);

// 结果 {“title”:”Professional JavaScript”,”edition”:3}

  1. 第二个参数是函数:
  2. ```javascript
  3. var jsonText = JSON.stringify(book, function(key, value){
  4. switch(key){
  5. case "authors":
  6. return value.join(",")
  7. case "year":
  8. return 5000;
  9. case "edition":
  10. return undefined; // 会被忽略
  11. default:
  12. return value;
  13. }
  14. });

第三个参数控制缩进和空白符

  1. var jsonText = JSON.stringify(book, null, 4);
  2. var jsonText = JSON.stringify(book, null, " - -");

2、parse的还原函数

  • 如果还原函数返回 undefined,则表示要从结果中删除相应的键。
  • 在将日期字符串转换为 Date 对象时,经常要用到还原函数。
    1. var book = {
    2. "title": "Professional JavaScript",
    3. "authors": [
    4. "Nicholas C. Zakas"
    5. ],
    6. edition: 3,
    7. year: 2011,
    8. releaseDate: new Date(2011, 11, 1)
    9. };
    10. var jsonText = JSON.stringify(book);
    11. var bookCopy = JSON.parse(jsonText, function(key, value){
    12. if (key == "releaseDate"){
    13. return new Date(value);
    14. } else {
    15. return value;
    16. }
    17. });
    18. alert(bookCopy.releaseDate.getFullYear());