高程3总结#第20章JSON
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相关推荐
- 第20章 JavaScript通信
第20章 JavaScript通信 在传统Web开发中,客户端与服务器端通信主要通过同步请求(页面刷新)来实现,当客户端向服务器端发出HTTP请求之后,服务器端接收并处理这个请求,然后响应完整的Web ...
- 第20章,运维自动化之ansible
更多内容请点击: Linux学习从入门到打死也不放弃,完全笔记整理(持续更新,求收藏,求点赞~~~~) https://blog.51cto.com/13683480/2095439 第20章,运维自 ...
- 第 20 章 权限管理的基本概念
第 20 章 权限管理的基本概念 20.1. 认证与验证 Spring Security作为权限管理框架,其内部机制可分为两大部分,其一是认证授权auhorization,其二是权限校验authent ...
- 信安教程第二版-第20章数据库系统安全
第20章 数据库系统安全 20.1 数据库安全概况 428 20.1.1 数据库安全概念 428 20.1.2 数据库安全威胁 428 20.1.3 数据库安全隐患 429 20.1.4 数据库安全需 ...
- 第 20 章 观察者模式
第 20 章 观察者模式 1.天气预报项目需求 天气预报项目需求,具体要求如下: 气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(比如发布到自己的网站或第三方) 需要设计开放型API ...
- 《TCP/IP网络编程》第20章
<TCP/IP网络编程>第20章 同步方法分类及CRITICAL_SECTION同步 用户模式(User mode)和内核模式(Kernal mode) 用户模式同步 内核模式同步 基于C ...
- 《Python编程无师自通》第20章 融会贯通
第20章 融会贯通 "神话和传说的魔力在我们这一代成真.只要在键盘上敲下正确的咒语,显示屏就像是活了过来,里面都是以前不可能存在或发生的事情." --费德里克·布鲁克斯(Frede ...
- 《MATLAB智能算法30个案例》:第20章 基于遗传模拟退火算法的聚类算法
<MATLAB智能算法30个案例>:第20章 基于遗传模拟退火算法的聚类算法 1. 前言 2. MATLAB 仿真示例 3. 小结 1. 前言 <MATLAB智能算法30个案例分析& ...
- 5G NR标准: 第20章 5G的演进
第20章 5G的演进 NR 的第一个版本,第 15 版,侧重于对 eMBB 的基本支持,在某种程度上,URLLC.1 如前几章所述,第 15 版是为即将发布的 NR 未来发展构建的基础 . NR 演进 ...
- 【Axure视频教程】第20章 全局变量
Axure10基础教程系列,适合小白打基础,基础扎实的同学可以在公众号查看其它案例教程. 本章就主要讲设置全局变量的交互 第20章 全局变量(纯净版) 更多axure教程地址: https://axh ...
最新文章
- Windows下安装Anaconda3与配置
- 这套监控系统让打工人颤抖:离职倾向、摸鱼通通都能被监测,争议出现后产品页面已404...
- python连连看_python tkinter实现连连看游戏
- python基础——Linux系统下的文件目录结构
- 软件介绍网站:“软矿”x-berry
- 使用IntelliJ, 让lombok生效的方式
- 推荐Chrome一款大气典雅神秘的主题 - 黑色系
- java 和c 比优势_Java和C++各有什么优势。
- Linux C文件编译
- 实验教学管理系统 c语言程序代写源码下载
- java 分布式同步锁_java编程进阶之路:回归锁的本质,探索分布式锁之源头
- jquery 添加扩展方法及为选择的对象添加方法
- 文字与编码的奥妙(上篇)
- Echarts中使用china.js
- char * 与char []区别总结
- 关于博客的自定义皮肤
- re之ida和OllyDbg的使用与代码分析
- JVM笔记(三)类与类加载
- 上位机与s7-200通讯控制伺服电机
- PointNetGPD 代码复现,环境配置,结果展示
热门文章
- ARM中R0-R15寄存器的作用
- 拷贝控制——拷贝、赋值与销毁
- #define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)~(sizeof(int) - 1) )
- html 上标下标 特殊字符等
- js返回上一页的实现方法
- Linux在终端启动程序关闭终端不退出的方法
- the JAR file spring-beans-4.0.0.RELEASE.jar has no source attachment
- 关于文件的工具类例子
- CentOS 6.3下Samba服务器的安装与配置【转载】
- linux C 总结篇(线程)下