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不总是最佳选择。