JSON 必知必会 观后记_json

推荐大家购买纸质书籍,当然如果条件有限可以临时下载电子版的:http://www.jb51.net/books/504703.html

术语
可移植性
平台和系统间传输信息的兼容性。
 
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不总是最佳选择。

时间: 2024-09-12 05:41:34

JSON 必知必会 观后记_json的相关文章

JavaScript必知必会(五) eval 的使用_javascript技巧

eval eval(parse) parse :里面跟参数字符串,我们知道执行javascript 会编译执行, 改变全局变量的值: var x = ; //定义的全局变量 alert(x);// var g = eval("x="); //eval 会根据当前上下文解析x alert(x);// 在全局作用域引用eval,改变全局作用域的值,不改变局部作用域的值 var g = eval; //全局引用eval var x = "global";//定义全局变量

Python 程序员必知必会的开发者工具

Python已经演化出了一个广泛的生态系统,该生态系统能够让Python程序员的生活变得更加简单,减少他们重复造轮的工作.同样的理念也适用于工具开发者的工作,即便他们开发出的工具并没有出现在最终的程序中.本文将介绍Python程序员必知必会的开发者工具. 对于开发者来说,最实用的帮助莫过于帮助他们编写代码文档了.pydoc模块可以根据源代码中的docstrings为任何可导入模块生成格式良好的文档.Python包含了两个测试框架来自动测试代码以及验证代码的正确性:1)doctest模块,该模块可

《Oracle PL/SQL必知必会》——第2章 初识Oracle和PL/SQL 2.1 什么是Oracle

第2章 初识Oracle和PL/SQL Oracle PL/SQL必知必会 在本章中,你将认识Oracle和PL/SQL是什么,以及你可以使用什么工具来操作它们. 2.1 什么是Oracle 在前一章中,你学习了数据库和SQL.如所解释的那样,做所有工作(存储.检索.管理和操作数据)的实际上是数据库软件(DBMS或数据库管理系统[Database Management System]).Oracle DBMS(或者简称为Oracle)就是一个DBMS:也就是说,它是数据库软件. Oracle已经

Visual Studio 使用及调试必知必会

原文:Visual Studio 使用及调试必知必会   一:C# CODING 技巧 1:TODO 然后 CTRL + W + T,打开任务列表,选中 Comments,就会显示所有待做的任务 2:打开所在的文件夹 右键单击任何一个文件选项卡, 选择"打开所在的文件夹",或在 Solution Explorer 的文件上面点右键: 3:比对同一个文件 鼠标向下拖动红框内的图标. 4:按意愿编程 我把它定义为:按意愿编程,即,在写代码过程中,如果觉得需要使用到一个新类,可以先不用创建这

《Oracle PL/SQL必知必会》导读

前言 Oracle PL/SQL必知必会 Oracle Database(或Oracle RDBMS)是如此流行并且获得了广泛的认可,以至于大多数用户将其简称为"Oracle"(忽略了Oracle公司制作其他软件甚至硬件的事实).Oracle Database(我将像大多数人那样将其简称为"Oracle",以使事情变得简单)从20世纪70年代起就出现了,成为最早的数据库管理系统之一.Oracle是世界上最常用的数据库管理系统(Database Management

【web必知必会】——图解HTTP(上)

原文:[web必知必会]--图解HTTP(上) 本篇总结关于http的相关知识,主要内容参考如下导图: 主要讲解的内容有: 1 URL与URI的区别. 2 请求报文与相应报文的内容. 3 GET与POST的区别. 4 http的cookie.持久化.管道化.多部分对象集合.范围请求等 后续会更新http其他的相关知识. 关键词概念 平时会经常接触到URL,他就是我们访问web的一个字符串地址,那么URI是什么呢?他们是什么关系呢? 先看看官方的解释: URL:uniform resource l

Android必知必会-使用Intent打开第三方应用及验证可用性

本文讲的是Android必知必会-使用Intent打开第三方应用及验证可用性,一个普通的应用默认会有一个入口 Activity,它在 AndroidManifest.xml 中一般这样写: <application>      <activity android:name=".MainActivity" >          <intent-filter>              <action android:name="andr

MySQL必知必会

本文链接 http://alex-my.xyz/books/database/MySQL必知必会 http://blog.csdn.net/alex_my/article/details/72357498 1 基础知识 1 主键 唯一标识表中每行的这个列(这组列)称为主键. 应该总是定义主键,虽然并不总是需要主键. 任意两行都不具有相同的主键值. 每一行都必须具有一个主键值,不可为NULL. 2 常用命令 SHOW DATABASES; SHOW TABLES; SHOW COLUMNS FRO

【web必知必会】—— 图解HTTP(下)

原文:[web必知必会]-- 图解HTTP(下) 上一篇<图解HTTP 上>总结了HTTP的报文格式,发送方式,以及HTTP的一些使用. 本文再总结以下内容: 1 http状态码 2 http报文首部中的各字段 3 http中的身份验证 通过上篇粗略的描述,大体了解了http首部的概念. 其实请求报文与响应报文长得差不多,区别就在于请求报文与响应报文有一个各自的报文首部,和一个请求行和状态行. 可以看到,差别就在于 请求行中指定的是HTTP版本和请求的方式(GET\POST等). 状态行中指定

JavaScript必知必会(九)function 说起 闭包问题_javascript技巧

function 函数格式 function getPrototyNames(o,/*optional*/ a) { a = a || []; for(var p in o) { a.push(p); } return a; } caller func.caller 返回函数调用者 function callfunc() { if(callfunc.caller) { alert(callfunc.caller.toString()); }else { alert("没有函数调用");