JavaScript(8)——JSON
JSON
啊呀呀,终于写到了JSON了。莫名的开心,虽然还是被说进度慢,不过,我不管,我就是开心。恩,好好学习,好好加油。(这是一段毫无逻辑的话,我也不知道说啥了)
JSON是JavaScript的一个严格的子集,利用JavaScript中的一些模式来表示结构化数据。它是一种数据格式,而不是一种编程语言。
【语法】
JSON的语法支持简单值、对象和数组三种类型的值。不支持变量、函数或对象实例。与JavaScript中表示数据的某些语法相同,但是并不局限于JavaScript范畴。
简单值
使用与JavaScript相同的语法,可以在JSON中表示字符串、数值、布尔值和null。但JSON不支持JavaScript中的特殊值undefined。
JavaScript字符串与JSON字符串的最大区别在于,JSON字符串必须使用双引号。
对象
对象作为一种复杂数据类型,表示一种无序的键值对儿。而每个键值对儿中的值可以是简单值,也可以是复杂值。
与JavaScript的对象字面量相比,JSON对象一没有声明变量(JSON中设有变量的概念),二是没有末尾的分号。属性的值可以是简单值有,也可以是复杂类型值。
数组
也是一种复杂数据类型,表示一组有序值的列表,可以通过数值索引来访问其中的值。数组的值也可以是任意类型——简单值、对象或数组。
JSON数组采用的就是JavaScript中的数组字面量形式。JSON数组也没有变量和分号。把数组和对象结合起来,可以构成更复杂的数据集合。
对象和数组通常是JSON数据结构的最外层形式,利用他们能够创造出各种各样的数据结构。
【解析与序列化】
JSON拥有与JavaScript类似的语法,也可以把JSON数据结构解析为有用的JavaScript对象。
JSON对象有stringify()和parse()两种方法。在最简单的情况下,这两种方法分别用于把JavaScript对象序列化为JSON字符串和把JSON字符串解析为原生JavaScript值。如下
var book={
title:"professional JavaScript",
authors:[
"Nicholas C. Zakas"
],
edition:3,
year:2011
};
var jaonText=JSON.stringify(book);
这个例子使用JSON.stringify()把一个JavaScript对象序列化为一个JSON字符串,然后将它保存在变量jsonText中。
【序列化选项】
JSON.stringify()可以接收两个参数,一个参数是个 过滤器,可以是一个数组,也可以是一个函数。第二个参数是一个选项,表示是否在JSON字符串中保留缩进。这两个参数用于指定以不同方式序列化JavaScript对象。
过滤结果
如果过滤参数是数组,那么JSON.stringify()的结果中将只包含数组中列出的属性。
为了改变序列化对象的结果,函数返回的值就是相应键的值。如果函数返回了undefined,那么相应的属性会被忽略。
要序列化的对象中的每一个对象都要经过过滤器。
字符串缩进
JSON.stringify()的方法的第三个参数用于控制结果中的缩进和空白符。如果这个参数是一个数值,那它表示的是每个级别缩进的空格数。如果缩进参数是一个字符串而非数值,则这个字符串将在JSON字符串中被用作缩进字符(不再使用空格)。缩进字符串最长不能超过10个字符长。
toJSON()方法
假设把一个对象传入JSON.stringify(),序列化该对象的顺序如下
(1)如果存在toJSON()方法而且能通过他取得有效的值,则调用该方法,否则,返回对象本身。
(2)如果提供了第二个参数,应用这个函数过滤器。传入函数的过滤器的值是第(1)步返回的值。
(3)对第(2)步返回的值进行相应的序列化。
(4)如果提供了第三个参数,执行相应的格式。
【解析选项】
JSON.parse()方法也可以接收另一个参数,该参数是一个函数(还原函数),将在每个键值对儿上调用。如果还原函数返回undefined,则表示要从结果中删除相应的键。如果返回其他值,则将该值插入到结果中。
JavaScript(8)——JSON的更多相关文章
- 面向对象的JavaScript(2):类
在小项目中对于JavaScript使用,只要写几个function就行了.但在大型项目中,尤其是在开发追求良好的用户体验的网站中,如SNS,就会 用到大量的JavaScrpt,有时JavaScript ...
- 前端开发面试题总结之——JAVASCRIPT(一)
___________________________________________________________________________________ 相关知识点 数据类型.运算.对象 ...
- 前端开发面试题总结之——JAVASCRIPT(三)
___________________________________________________________________________________ 相关知识点 数据类型.运算.对象 ...
- 前端开发面试题总结之——JAVASCRIPT(二)
___________________________________________________________________________________ 相关知识点 数据类型.运算.对象 ...
- python进阶05 常用问题库(1)json os os.path模块
python进阶05 常用问题库(1)json os os.path模块 一.json模块(数据交互) web开发和爬虫开发都离不开数据交互,web开发是做网站后台的,要跟网站前端进行数据交互 1.什 ...
- c#实例化继承类,必须对被继承类的程序集做引用 .net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3.6笔记 你大波哥~ C#开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具
c#实例化继承类,必须对被继承类的程序集做引用 0x00 问题 类型“Model.NewModel”在未被引用的程序集中定义.必须添加对程序集“Model, Version=1.0.0.0, Cu ...
- 《你必须知道的javascript(上)》- 2.this与对象原型
1 关于this 1.1 为什么使用this 随着你的使用模式越来越复杂,显式传递上下文对象会让代码变得越来越混乱,使用this则不会这样.当我们介绍对象和原型时,你就会明白函数可以自动引用合适的上下 ...
- 你不知道的Javascript(上卷)读书笔记之一 ---- 作用域
你不知道的Javascript(上卷)这本书在我看来是一本还不错的书籍,这本书用比较简洁的语言来描述Js的那些"坑",在这里写一些博客记录一下笔记以便消化吸收. 1 编译原理 在此 ...
- 初探JavaScript(三)——JS带我"碰壁"带我飞
已经写了两篇关于小白的JavaScript之行,不可否认,每一种语言都有其精华与糟粕之处,来不及细细体味其精华奥妙,也没法对其评头论足,只能先了解,后深入.到目前为止已经看完<JavaScrip ...
随机推荐
- winform控件跨线程委托
1. this.listBox1.BeginInvoke(new Action(() => { if (listBox1.Items.Count > 20) listBox1.Items. ...
- Oracle 锁模式
0:none 1:null 空 2:Row-S 行共享(RS):共享表锁 3:Row-X 行专用(RX):用于行的修改 4:Share 共享锁(S):阻止其他DML操作 5:S/Row-X ...
- django模板系统基础
模板系统基础Django模板是一个string文本,它用来分离一个文档的展现和数据 模板定义了placeholder和表示多种逻辑的tags来规定文档如何展现 通常模板用来输出HTML,但是Djang ...
- java全组合算法
public static void combination(int[] s) { if (s.length == 0) { return; } int len = s.length; int n = ...
- 新服务器sudo与权限分配<NIOT>
0,生成RSA公钥秘钥 a,源主机:#ssh-keygen -t rsa 1,拷贝公钥到authorized_keys文件里面 a,源主机:#ssh-copy-id -i /root/.ssh/id_ ...
- 设置session存储在int sqlserver上---使用aspnet_regsql.exe工具
以管理员身份打开命令窗 1)cd到相应的framework下,如:C:\Windows\Microsoft.NET\Framework\v4.0.30319 2)执行如下命令:aspnet_regsq ...
- studio_svn
最新升级IDEA12到13版本,升级后发现IDEA中SVN无法正常使用,但文件夹下能够正常使用. 并且报错:svn: E204899: Cannot run program "svn&quo ...
- 转:IIS虚拟目录实现与文件服务器网络驱动器映射共享
这篇文章转载别人,想原创作者致敬! 我本人也遇到同样的问题,故转载记录. 本文重点描述如何使用IIS访问共享资源来架设站点或执行 ASP.Net 等脚本. 通常情况下,拥有多台服务器的朋友在使用IIS ...
- css实现遮罩层,父div透明,子div不透明
使用元素的opacity 属性,设置遮罩层的效果, 主要 样式是:background-color: #ooo; opacity:0.3; <div style="width:500p ...
- XML的xPath格式
XML的xPath格式(C#) xPath是XML提供的一种格式,用来查询XML的节点. <?xml version="1.0" encoding="ISO-885 ...