JavaScript高级程序设计:第二十章
第二十章
一、语法
JSON的语法可以表示以下三种类型的值:
(1)简单值
(2)对象
JSON的对象与javascript字面量有一些不同。例如,在javascript中,前面的对象字面量可以写成下面这样:
var object = {
“name” : “Nicholas” ,
“age” : 29
} ;
JSON表示上述对象的方式如下:
{
“name” : “Nicholas” ,
“age” : 29
}
不同之处:首先,没有声明变量,其次,没有末尾的分号。最后,对象的属性必须加双引号。
(3)数组
下面是javascript中的数组字面量:
var values = [25 , “hi” , true] ;
在JSON中,可以采用同样的语法表示同一个数组:
[]25 , “hi” , true]
同样,JSON数组也没有变量和分号。
二、解析与序列化
1.JSON对象
早期的JSON解析器基本上就是使用javascript的eval()函数。由于JSON是javascript语法的子集,因此eval()函数可以解析、解释并返回javascript对象和数组。
JSON对象有两个方法:stringgy( )和parse( )。在最简单的情况下,这两个方法分别用于把javascript对象序列化为JSON字符串和把JSON字符串解析为原生javascript值。
2.序列化选项
JSON.stringify( )除了要序列化的javascript对象外,还可以接收另外两个参数,这两个参数用于指定以不同的方式序列化javascript对象。第一个参数是过滤器,可以是一个数组,也可以是一个函数;第二个参数是一个选项,表示是否在JSON字符串中保留缩进。
(1)过滤结果
如果过滤器参数是数组,那么JSON.stringify( )的结果中将只包含数组中列出的属性。来看下面的例子:
var book = {
“title” : “Professional JavaScript” ,
“authors” : [
“Nicholas C.Zakas”] ,
edition : 3 , year : 2011
} ;
var jsonText = JSON.stringify( book , [“title” , “edition”] ) ;
JSON.stringify( ) 的第二个参数是一个数组,其中包含两个字符串:”title”和”editon”。这两个属性与将要序列化的对象中的属性是对应的,因此在返回的结果字符串中,就只会包含这两个属性:
{ “title” : “Professional JavaScript” , “edition” : 3 }
(2)字符串缩进
JSON.stringify( )方法的第三个参数用于控制结果中的缩进和空白符。如果这个参数是一个数值,那它表示的是每个级别缩进的空格数。例如,要在每个级别缩进4个空格,可以这样写代码:
var book = {
“title” : “Professional JavaScript” ;
“authors” : [
“Nicholas C . Zakas”
] ,
edition : 3 ,
year : 2011
} ;
var jsonText = JSON.stringify( nook , null , 4 ) ;
(3)toJSON()方法
有时候,JSON.stringify( )还是不能满足对某些对象进行自定义序列化的需求。在这些情况下,可以通过对象上调用toJSON()方法,返回其自身的JSON数据格式。
toJSON( )可以作为函数过滤器的补充,因此理解序列化的内部顺序十分重要。假设把一个对象传入JSON.stringify( ),序列化该对象的顺序如下:
如果存在toJSON( )方法而且能通过它取得有效的值,则调用该方法。否则,按默认顺序执行序列化。
如果提供了第二个参数,应该用这个函数过滤器。传入函数过滤器的值是第(1)步返回的值。
对第(2)步返回的每个值进行相应的序列化。
如果提供了第三个参数,执行相应的格式化。
3.解析选项
JSON.parse( )方法也可以接收另一个参数,该参数是一个函数,将在每个键值对上调用。为了区别JSON.stringify( )接收的替换函数,这个函数被称为还原函数。
JavaScript高级程序设计:第二十章的更多相关文章
- javascript高级程序设计第二章知识点提炼
这是我整理的javascript高级程序设计第二章的脑图,内容也是非常浅显与简单.希望您看了我的博客能够给我一些意见或者建议.
- JavaScript 高级程序设计第二版
20.4 部署 20.4.1 构建 构建过程始于在源控制中定义用于存储文件的逻辑结构.最好避免使用一个文件存放所有的JavaScript,遵循以下面向对象语言中的典型模式:将每个对象或自定义了类别分别 ...
- javascript高级程序设计---第二、三章
在HTML中引用javaScript javascript的几个属性 type async(异步加载 只适用于外部JS且IE8以上 HTML5规范 先于load执行) src defer(延迟加载 ...
- JavaScript 高级程序设计 第二版
function outputNumbers(count) { (function () { for (var i =0;i < count; i++) { ...
- javascript高级程序设计第二章
看后总结: 1.js代码用得最多的两种加载方式: a)外部文件形式:<script type="text/javascript" src="jquery.min.j ...
- 读书笔记 - javascript 高级程序设计 - 第二章 在Html中使用JavaScript
1 <script>的6个属性 async 立即下载当前script标签的外部脚本 但不能影响别的 charset 没用了 defer 文档显示之后再执行脚本,只对外部脚本有效 lan ...
- 《Javascript高级程序设计》阅读记录(一):第二、三章
<Javascript高级程序设计>阅读记录(一) 这个系列,我会把阅读<Javascript高级程序设计>之后,感觉讲的比较深入,而且实际使用价值较大的内容记录下来,并且注释 ...
- 《JavaScript高级程序设计》(第二版)
这本书的作者是 Nicholas C.Zakas ,博客地址是 http://www.nczonline.net/ ,大家可以去多关注,雅虎的前端工程师,是YUI的代码贡献者,可想而知这本书得含金量, ...
- 《JavaScript高级程序设计》——第二章在HTML使用JavaScript
这章讲的是JavaScript在HTML中的使用,也就是<script>元素的属性.书中详细讲了async.defer.src和type四个<script>的属性. 下面是对第 ...
- 《JavaScript高级程序设计(第3版)》阅读总结记录第一章之JavaScript简介
前言: 为什么会想到把<JavaScript 高级程序设计(第 3 版)>总结记录呢,之前写过一篇博客,研究的轮播效果,后来又去看了<JavaScript 高级程序设计(第3版)&g ...
随机推荐
- poj 1308Bugs Integrated, Inc. [三进制状压]
题目链接[http://poj.org/problem?id=1038] 题意: 给出一个N*M大小的图,图中有K个坏点.N (1 <= N <= 150), M (1 <= M & ...
- MUI判断网络连接以及监听网络变化JS
来源:netChange问题:怎么判断网络状态 MUI用于获取当前设备的网络类型 function plusReady(){ var types = {}; types[plus.networkinf ...
- hadoop 2.2.0 关于map和reduce的个数的设置
关于hadoop中的map过程,我的理解是每一个map系统会开启一个JVM进程来处理,map之间相互并行,map函数内串行.这样的想法是否正确? 由于想在hadoop集群上算一个初始输入数据不多,但是 ...
- HTML5预览图片、异步上传文件
注意啦:本文的代码都是以JQuery为示例,jq_开头的变量都是jq对象. 在HTML5中,我们可以在图片上传之前对图片进行预览,就像下面这么做 jq_upload_file.change(funct ...
- 云锁Linux服务器安全软件安装及防护webshell、CC、XSS跨站攻击设置
无论我们在使用电脑,还是使用VPS/服务器的时候,最为担心的就是服务器是否有安全问题,尤其是网站服务器再遭受攻击的时候如何得到防护.对于大 部分站长用户来说,我们可能只会使用基础的环境,如果真遇到问题 ...
- CodeForces 700B Connecting Universities
统计每一条边的贡献,假设$u$是$v$的父节点,$(u,v)$的贡献为:$v$下面大学个数$f[v]$与$2*k-f[v]$的较小值. #pragma comment(linker, "/S ...
- Monkey总结
Monkey是一个快速检查内存泄露的好工具,可以初步发现较明显的内存泄露问题. 什么是内存泄露?是指不在使用的对象持续占有内存,造成内存空间的浪费. 检查内存泄露的基本操作步骤: 1.运行Monkey ...
- 第七十六节,css颜色和透明度,盒子阴影和轮廓,光标样式
css颜色和透明度,盒子阴影和轮廓,光标样式 学习要点: 1.颜色和透明度 2.盒子阴影和轮廓 3.光标样式 一.颜色和透明度 颜色我们之前其实已经用的很多了,比如字体颜色.背景颜色.边框颜色.但除了 ...
- Arrays.toString(a)--->将数组a的值转换为字符串
Arrays.toString(数组)是java内置类Arrays类的一个方法,具体查Api可知.因为数组是不可直接输出的,它的作用是将数组转换为字符串.其实用for循环也是可以做到的,只不过比for ...
- powder designer 转数据库
1.打开“file new model”