JSON

语法

  • JSON语法可以表示三种类型的值

    • 简单值:使用与 JavaScript 相同的语法,可以在 JSON 中表示字符串、数值、布尔值和 null 。但 JSON 不支持 JavaScript 中的特殊值 undefined 。
    • 对象:对象作为一种复杂数据类型,表示的是一组无序的键值对儿。而每个键值对儿中的值可以是简单值,也可以是复杂数据类型的值。
    • 数组:数组也是一种复杂数据类型,表示一组有序的值的列表,可以通过数值索引来访问其中的值。数组的值也可以是任意类型——简单值、对象或数组。

简单值

  • 最简单的JSON数据形式,数值5,字符串“Hello world”
  • JavaScript字符串与JSON字符串最大区别在于,JSON字符串必须使用双引号
  • 布尔值和null也是有效的JSON形式

对象

//JavaScript对象
var object = {
"name": "Nicholas",
"age": 29
};
//JSON对象
{
"name": "Nicholas","age": 29
}
//JSON中对象嵌入对象
{
"name": "Nicholas","age": 29,"school": {"name": "Merrimack College","location": "North Andover, MA"}
}

数组

  • 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对象

  • 早期的JSON解析器基本上就是使用JavaScript的eval()函数
  • JSON对象有两个方法:stringify()和parse(),在最简单情况下,两个方法分别用于把JavaScript对象序列化为JSON字符串和把JSON字符串解析为原生JavaScript值

    var book = {title: "Professional JavaScript",authors: ["Nicholas C. Zakas"],edition: 3,year: 2011
    };
    var jsonText = JSON.stringify(book);
    //得到的结果为
    {"title":"Professional JavaScript","authors":["Nicholas C. Zakas"],"edition":3,"year":2011}
    //反向操作
    var bookCopy = JSON.parse(jsonText);

序列化选项

  • JSON.stringify() 除了要序列化的 JavaScript 对象外,还可以接收另外两个参数,这两个参数用于指定以不同的方式序列化 JavaScript 对象。第一个参数是个过滤器,可以是一个数组,也可以是一个函数;第二个参数是一个选项,表示是否在 JSON 字符串中保留缩进。

    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}
    //结果为undefined的例子
    var book = {"title": "Professional JavaScript","authors": ["Nicholas C. Zakas"],edition: 3,year: 2011
    };
    var jsonText = JSON.stringify(book, function(key, value){switch(key){case "authors":return value.join(",")case "year":return 5000;case "edition":return undefined;default:return value;}
    });
    //结果为
    {"title":"Professional JavaScript","authors":"Nicholas C. Zakas","year":5000}
  • JSON.stringify() 方法的第三个参数用于控制结果中的缩进和空白符。如果这个参数是一个数值,那它表示的是每个级别缩进的空格数

    var book = {"title": "Professional JavaScript","authors": ["Nicholas C. Zakas"],edition: 3,year: 2011
    };
    var jsonText = JSON.stringify(book, null, 4);
    //结果如下
    {"title": "Professional JavaScript","authors": ["Nicholas C. Zakas"],"edition": 3,"year": 2011
    }
  • 如果缩进参数是一个字符串而非数值,则这个字符串将在 JSON 字符串中被用作缩进字符(不再使用空格)缩进字符串最长不能超过 10 个字符长。如果字符串长度超过了 10 个,结果中将只出现前 10 个字符。

    var jsonText = JSON.stringify(book, null, " - -");
    //结果如下
    {--"title": "Professional JavaScript",--"authors": [----"Nicholas C. Zakas"--],--"edition": 3,--"year": 2011
    }
  • toJson()方法,返回其自身的JOSN数据格式

    var book = {"title": "Professional JavaScript","authors": ["Nicholas C. Zakas"],edition: 3,year: 2011,toJSON: function(){return this.title;}
    };
    var jsonText = JSON.stringify(book)

解析选项

  • JSON.parse()方法也可以接收另一个参数,该参数是一个函数,将在每个键值对上调用

    var book = {"title": "Professional JavaScript","authors": ["Nicholas C. Zakas"],edition: 3,year: 2011,releaseDate: new Date(2011, 11, 1)
    };
    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())

高程3总结#第20章JSON相关推荐

  1. 第20章 JavaScript通信

    第20章 JavaScript通信 在传统Web开发中,客户端与服务器端通信主要通过同步请求(页面刷新)来实现,当客户端向服务器端发出HTTP请求之后,服务器端接收并处理这个请求,然后响应完整的Web ...

  2. 第20章,运维自动化之ansible

    更多内容请点击: Linux学习从入门到打死也不放弃,完全笔记整理(持续更新,求收藏,求点赞~~~~) https://blog.51cto.com/13683480/2095439 第20章,运维自 ...

  3. 第 20 章 权限管理的基本概念

    第 20 章 权限管理的基本概念 20.1. 认证与验证 Spring Security作为权限管理框架,其内部机制可分为两大部分,其一是认证授权auhorization,其二是权限校验authent ...

  4. 信安教程第二版-第20章数据库系统安全

    第20章 数据库系统安全 20.1 数据库安全概况 428 20.1.1 数据库安全概念 428 20.1.2 数据库安全威胁 428 20.1.3 数据库安全隐患 429 20.1.4 数据库安全需 ...

  5. 第 20 章 观察者模式

    第 20 章 观察者模式 1.天气预报项目需求 天气预报项目需求,具体要求如下: 气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(比如发布到自己的网站或第三方) 需要设计开放型API ...

  6. 《TCP/IP网络编程》第20章

    <TCP/IP网络编程>第20章 同步方法分类及CRITICAL_SECTION同步 用户模式(User mode)和内核模式(Kernal mode) 用户模式同步 内核模式同步 基于C ...

  7. 《Python编程无师自通》第20章 融会贯通

    第20章 融会贯通 "神话和传说的魔力在我们这一代成真.只要在键盘上敲下正确的咒语,显示屏就像是活了过来,里面都是以前不可能存在或发生的事情." --费德里克·布鲁克斯(Frede ...

  8. 《MATLAB智能算法30个案例》:第20章 基于遗传模拟退火算法的聚类算法

    <MATLAB智能算法30个案例>:第20章 基于遗传模拟退火算法的聚类算法 1. 前言 2. MATLAB 仿真示例 3. 小结 1. 前言 <MATLAB智能算法30个案例分析& ...

  9. 5G NR标准: 第20章 5G的演进

    第20章 5G的演进 NR 的第一个版本,第 15 版,侧重于对 eMBB 的基本支持,在某种程度上,URLLC.1 如前几章所述,第 15 版是为即将发布的 NR 未来发展构建的基础 . NR 演进 ...

  10. 【Axure视频教程】第20章 全局变量

    Axure10基础教程系列,适合小白打基础,基础扎实的同学可以在公众号查看其它案例教程. 本章就主要讲设置全局变量的交互 第20章 全局变量(纯净版) 更多axure教程地址: https://axh ...

最新文章

  1. Windows下安装Anaconda3与配置
  2. 这套监控系统让打工人颤抖:离职倾向、摸鱼通通都能被监测,争议出现后产品页面已404...
  3. python连连看_python tkinter实现连连看游戏
  4. python基础——Linux系统下的文件目录结构
  5. 软件介绍网站:“软矿”x-berry
  6. 使用IntelliJ, 让lombok生效的方式
  7. 推荐Chrome一款大气典雅神秘的主题 - 黑色系
  8. java 和c 比优势_Java和C++各有什么优势。
  9. Linux C文件编译
  10. 实验教学管理系统 c语言程序代写源码下载
  11. java 分布式同步锁_java编程进阶之路:回归锁的本质,探索分布式锁之源头
  12. jquery 添加扩展方法及为选择的对象添加方法
  13. 文字与编码的奥妙(上篇)
  14. Echarts中使用china.js
  15. char * 与char []区别总结
  16. 关于博客的自定义皮肤
  17. re之ida和OllyDbg的使用与代码分析
  18. JVM笔记(三)类与类加载
  19. 上位机与s7-200通讯控制伺服电机
  20. PointNetGPD 代码复现,环境配置,结果展示

热门文章

  1. ARM中R0-R15寄存器的作用
  2. 拷贝控制——拷贝、赋值与销毁
  3. #define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)~(sizeof(int) - 1) )
  4. html 上标下标 特殊字符等
  5. js返回上一页的实现方法
  6. Linux在终端启动程序关闭终端不退出的方法
  7. the JAR file spring-beans-4.0.0.RELEASE.jar has no source attachment
  8. 关于文件的工具类例子
  9. CentOS 6.3下Samba服务器的安装与配置【转载】
  10. linux C 总结篇(线程)下