JSON 必知必会 观后记
可移植性
平台和系统间传输信息的兼容性。
JSON
JavaScriptObjectNotation 对象表示法。
数据交换格式
用于不同平台或系统间交换数据的文本。
字面量
字面意思与其想表达的意思完全一致的值。
变量
通过形如X的标识符来表示的,可以修改的一类值。
最大移植性
通过保证数据本身对于平台和系统的兼容性来提供超越数据格式本身的可移植性。
名称-值对
指拥有名称和对应值的属性和特征(也叫键值对)。
语法验证
json格式的验证。
一致性验证
关注独特的数据结构验证。
JSON中的字符串类型
一个字符串值,如“你是个好人”,使用双引号包裹。
概念
JSON是一种数据交换格式。
JSON独立于编程语言。
JSON基于JavaScript对象的字面量表示法(重点在于表示法)。
JSON表达数据的方式对通用的编程概念都很友好。
JSON基于JavaScript对象字面量表示属性的语法,但并不包含与JavaScript对象字面量的函数相关部分。
JSON的名称-值对中,名称始终被双引号包裹。
JSON的名称-值对中,值可以是字符串,数字,布尔值,null,对象式数组。
JSON中的名称-值对列表始终被花括号包裹。
JSON中多个名称值对使用逗号分隔。
JSON文件使用.json扩展名。
JSON的媒体类型是application/json。
JSON中的布尔类型的值只有true和false,所有字母必须小写。
JSON中的null值的所有字母必须小写,表示空值。
JSON中的数字类型,一个数字值,如66,可以是正整数,负整数,小数,指数。
对象和数组很关键的区别就是,对象是名称-值对构成的列表或集合,数组是值构成的列表和集合。
对象和数组另一个关键区别是,数组中所有值应具有相同的数据类型。
术语
JSON中的数组
数组是值的集合或列表,每个值都可以是字符串,数字,布尔值,对象或数组中的任何一种。数组必须被[]包裹,且值与值之间用逗号分隔。
JSON中的对象类型
对象类型是使用逗号分隔的名称-值对构成的集合,并使用{}包裹。
JSON Schema
数据交换中的一种虚拟合同。
服务端(web开发中的)
当网页式资源被请求时,在服务器上执行的一系列操作。服务器为互联网浏览器提供其处理和加载的响应。
客户端(web开发中的)
当浏览器请求的界面加载完毕时执行的一系列操作,通常是指HTML,CSS和JavaScript。
概念
JSON验证器负责验证语法错误,JSON Schema负责提供一致性验证。
JSONSchema是负责数据接收第一道防线,也是数据发送方节约时间,保证数据正确的好工具。
JSONSchema可以解决下列一致性验证的问题
1.值的数据类型是否正确? 可以具体规定一个值是数字、字符串等类型。
2.是否包含所需要的数据? 可以具体规定哪些数据是需要的,哪些不需要的。
3.值的形式是不是我需要的? 可以指定范围,最小值最大值。
JSON本身不构成什么威胁,它只是文本。
在定位JSON安全问题时,应该记住以下3件事.
1.不要使用*数组,*数组是合法的JavaScript脚本,他们可以用<script>标签链接并使用。
2.对于不想公开的资源,仅允许使用HTTPPost方法请求,而不是Get方法,get方法可以通过url请求,甚至放在script标签中。
3.使用JSON.parser()来替代eval(),eval()函数会将传入的字符串编译并执行,这会让你的代码易被攻击,应仅使用JSON.parser()来解析json数据。
安全漏洞通常由于开发人员没有考虑“黑客如何利用这一点”这一问题所导致的。
JavaScript的XMLHTTPRequest与WEBAPI之间的关系是客户端与服务端之间的关系。
XMLHTTPRequest并不仅限于XML,还可以用它来请求JSON资源
术语
跨站请求伪造(CSRF)
指利用站点对用户浏览器的信任进行攻击
顶层JSON数组
存在于JSON名称-值对之外的位于文档最顶层的JSON数组。
注入攻击
依赖于将数据注入到web应用程序以方便恶意数据执行或编译的攻击。
JSON跨站脚本攻击
通过截取或将站点中所使用的第三方代码更换为恶意脚本,来对站点进行的一种注入攻击。
webApi
通过Http与服务进行交互的一系列指令与标准。
XMLHTTPRequest
一种JavaScript对象,无需刷新页面即可从一个URL获取数据,常用与AJAX编程。
超文本传输协议(HTTP)
万维网使用的交换数据的基本协议
序列化
将对象转化为文本的操作
反序列化
将文本转化为对象的操作。
概念
网站为人服务,webAPI为代码服务,他们都使用Http协议。
同源策略使得JavaScript和JSON资源进行客户端-服务端交流时出现了一些困难。
客户端跨域的XMLHTTPRequest需要服务端的支持来保证JSON资源请求成功。
jQuery是一款提供了JSON请求和解析功能的能够缩短开发时间的抽象化工具,同时它还解决了跨浏览器兼容问题。
AngularJS MVC的概念
JSON是模型||数据模型
HTML是视图,且提供了与模型进行绑定的语法
控制器是AngularJS语法来定义和操作与模型和视图间的交互的JavaScript文件。
AngularJS使得JavaScript对象和JSON在MVC架构中大放异彩。
在关系型数据库中,常常会存在表列行以及他们之间的关系,其中会用到主键和外键。
NoSQL数据库有许多种,它们有与传统的关系型模型不同的数据存储与利用方法。
CouchDB数据库重要概念
1.它是一种面向文档的NoSQL数据库
2.它存储和管理JSON文档
3.它会在存储和获取数据的同时维护好数据结构
4.它会使用基于HTTP的API来获取作为JSON文档资源的数据
5.它使用JavaScript作为查询语言,且通过视图的map和reduce方法来跨API获取数据。
在服务端,可以将JSON反序列化为对象而运用在编程逻辑中,也可以将对象序列化成JSON格式。
JSON同时被服务端和客户端较好的支持,使得它在web领域从诸多交换数据格式中脱颖而出。
术语
同源策略
出于安全考虑,浏览器仅会请求同一域的脚本。
跨域资源共享CORS
通过设置响应头,使得跨于请求可以成功。
JSON-p
使用script标签,绕过同源策略限制,从不同域名的服务器请求JSON。
抽象化
一种处理复杂系统的技术,主要思想是将一个大问题转换为多个小问题
框架
一种能够节约时间,已让我们更专注于构建功能的抽象化工具。
Jquery.parserJSON()
一个jquery的函数,它不仅调用JSON.parser()函数,还会兼容那些不支持JSON.parser()函数的老式浏览器,且通过验证字符来评估字符串,从而避免了可能的安全问题。
jquery.getJSON()
jquery.ajax()函数的简写形式,其中包含了将json解析为JavaScript对象的功能。
单页web应用
与传统的多页方式不同,着力于提供更加无缝的应用体验的网页。
模型-视图-控制器(MVC)
一种应用架构模式,它将应用分为3部分:模型(数据)、视图(展示)、以及控制器(更新模型和视图)
AngularJS
一款使用JavaScript对象作为数据模型的JavaScriptMVC框架。
关系型数据库
一种将存储的数据用可以辨识的关系进行结构化存储的数据库。
NoSQL数据库
一种不通过存储数据间关系来存储的数据库。
CouchDB
一种面向文档的NoSQL数据库存储类型,使用JSON文档的形式来存储数据。
ASP.NET
微软开发的服务端Web框架
PHP
用于创建动态web页面的服务端脚本语言
Ruby on Rails
使用Ruby编写的服务端Web应用框架
Node.js
基于谷歌V8引擎的服务端JavaScript。
java
一种面向对象编程语言。
JSON还会作为静止的配置文件
在考虑用什么数据格式时,数据的形式和交换数据的系统都应该被考虑到。!!!JSON不总是最佳选择。