JSON必知必会

2017-03-05  本文已影响0人  z嘉嘉嘉

[toc]

JSON必知必会

学习网站:SafariBooksOnline

它是什么?
我可以用它做什么?
那些别有用心的人会用它做什么?

目录概述:

第1~4章:JSON基础知识:

第5章:研究JSON的安全问题

第6~9章:JSON是如何在代码中使用的

其他章节: 回答JSON作为数据交换格式所扮演的种种角色,我们可以使用它做什么?

章节目录

语言的学习并没有学习编程中通用的概念重要

第一章:什么是JSON?

1.1 JSON是一种数据交换格式

1.2 JSON独立于编程语言

1.3 专业数据和概念

笔记:

语言的学习并没有学习编程中通用的概念重要

我们使用JSON,即:我们使用的是一种 基于对象表示法的 数据交换格式

第二章:JSON语法

2.1 JSON基于JavaScript对象字面量

        eg :    x = 5       :     x 表示变量     5是字面量

2.2 名称 - 值对

"animal" : "cat"

2.3 正确的JSON语法

名称:始终需要被双引号包裹。双引号中的名称可以是任何有效的字符串。

        ”myAnimal“ : ”cat“
        “My animal” : ”cat“     // 名称可以包含空格
        ”Library's animal“ : ”cat“    //名称可以包含单引号

值:并不总是需要被双引号包裹。

    当值是 字符串 的时候,必须 使用双引号包裹;
    当值是  数字 、布尔值、数组、对象、null等其他数据类型的时候,都不应该被双引号包裹。

构建JSON:了解构建一个对象的语法(骑士册封仪式 : “JSON先生,我在此封你为对象”)

{
    “animal” : "cat",
    "color" : "orange"
}

:
例 1: 不能通过验证的“JSON

{    
    title  : "This is my titile",
    body : "This is my body"
}

错误 : 验证器会抛出一个 解析错误。
原因 : 名称没有加上双引号。如果名称没有加上双引号,则表示这是一个JavaScript对象,而不是JSON。

例 2. 不合法的JSON(单引号)

{    
    ‘title’  : ‘This is my titile’,
    ’body‘ : ’This is my body‘
}

例 3. 合法JSON

{    
    "title"  : "This is my titile",
    ”body" : "This is my body"
}

2.4 语法验证

工具:

2.5 JSON文件

*.json文件

2.6 JSON的媒体类型

JSON 的MIME类型是application / json

第三章 JSON数据类型

提前了解并学会使用一样事物是很有用的,无论是在计算机世界中,还是在现实世界中。

3.1 数据类型简介

原始数据类型:在不同编程语言中一成不变的数据类型通常叫做原始数据类型。

4.1 数据类型简介

4.1 数据类型简介

:原始数据类型*:在不同编程语言中一成不变的数据类型通常叫做原始数据类型。

3.2 JSON中的数据类型

由于JSON是基于对象字面量表示法 以及 对象数据类型的,你可能觉得让它作为数据交换格式有点不妥。原因是,数据交换格式:是以让不同的两个>系统之间能够进行交流为目的,这一格式所表达的必须是共有的部分。
  记住:复合数据类型对象 的 数据结构 可以 被解构为 原始的数据类型。
  因此,即使对于那些不支持对象数据类型的语言来说,一旦这个数据结构能够被解构为 原生的数据类型,就很好处理了。

JSON中的数据类型

3.3 JSON中的对象数据类型

{
    "person" : {
            "name" : "lindsay bassett",
            "head"  : {
                "hair" : {
                    "color" : "light blond",
                    "length" : "short"
                 },
                "eyes" : "green"
            }
    }
}

3.4 JSON中的字符串类型

在JavaScript中,使用单引号或者双引号没有区别。然而,JSON不是JavaScript对象字面量,它只是基于JavaScript对象字面量。在JSON中,仅允许使用双引号包裹字符串。
注意:由于JSON解析器来说` " { } ,[ ] `都是解析的指令,因此对于除了a~z ,A~Z字符构成的字符串,JSON中对于 字符串中 其具有特殊含义 的 字符串 的识别 需要 转译。JSON中除了 "   \还需要转译以下字符:

3.5 JSON中数字类型

3.6 JSON中的布尔类型

3.7 JSON中的null类型

对于 不存在 或者 未定义 的属性的值,使用 null 来描述。

注意 不要把null 与undefined 混淆

3.8 JSON中的数组类型

3.9 概念

第四章 JSON Schema

4.1 验证的魔力

4.2 JSON Schema 简介

4.3 专业术语和概念

第五章 JSON中的安全问题

JSON本身不会构成什么威胁,因为本身它就是一种数据交换格式。它不过是一种数据文件或者数据流。真正能产生安全问题的是 JSON的使用。该章节重点讨论在
WEB中使用JSON时最常见的两个安全问题:跨站脚本伪造跨站脚本攻击

5.1 客户端和服务端的关系

举例:



笔记:

我去餐厅就餐这件事情中:
我是客户端
餐厅是服务端

我向服务员点餐:
我拿着我餐桌位置的标识,向服务员描述我的需求,服务员在知道我的需求 和 我的置后,拿着我的请求信息向厨房发起一个请求,厨房接收服务员传递过来的信
息,经过处理加工,把对应请求内容的食物做好后,由服务员拿着我的位置信息和做好的晚餐,对我刚刚的请求做出一个响应,即:将食物送到我的餐桌上,然后我就能够享用了。

在这一关系中:

我 是 客户端,
餐厅 是 服务端,
厨房 是 服务器
我对应的 餐桌 是 客户端浏览器,
服务员 是 互联网+浏览器,
我点的单 是 我通过浏览器和互联网 向 服务器发送的请求
送到我桌子上的餐品 是 服务器给我的响应内容,由客户端浏览器解析后展示给我。

服务器给我的响应内容 是 客户端代码
服务器处理请求,得到响应内容,生成响应并发送的过程,称为 服务器代码。

5.2 跨站请求伪造

跨站请求伪造,即:CSRF(cross-site request gorgery,读作sea-surf),是一种利用站点对用户浏览器的信任而发起攻击的方式。CSRF漏洞已经存在了很长时间了,远比JSON早。

攻击原理:

[
    {
        "user" : "zhyingjia"
    },
    {
        "phone": "123-123-1236"
    }
]
<script src = "[https: // www.yourspecialbank.com](https://www.yourspecialbank.com/)/user.json"></script>

CSRF 就是利用了这一信任关系。黑客为了利用这一信任,需要在你已登录银行账号的情况下访问其他含有危险 <script> 标签的网站。要实现这点,他事先会发送大量的伪造邮件,这些邮件会伪造的和你的银行发来的邮件一模一样,如果接受者没有好好查看一下发件人或者邮件中的链接是否指向可以信任的网站,那么就很可能点进去。
举个例子:
如果某一天你生病了或者精神状态不太好,不小心点开了这个链接。
如果,你这时你没有退出银行账号,那么你与银行之间的会话仍然存在。此时你与银行之间处于信任关系之中。
如果此时,你进入了坏人的网站,即使你马上意识到这个网站有点奇怪并且立刻关闭了它,也为时已晚了。
因为黑客已经获取到了敏感的 JSON 数据并发送发到了自己的服务器并且保存了起来。

那么,如何阻止 CSRF 攻击呢?

例如:

{
    "info" :  [
        {
            "user" : "zhyingjia"
        },
        {
            "phone": "123-123-1236"
        }
    ]
}

5.3 注入攻击

5.3.1 跨站脚本攻击

5.3.2 安全漏洞: 决策上的失误

5.4 专业术语和概念

第六章 JavaScript中的XMLHttpRequst与Web API

JavaScript中的XMLHttpRequst 与 Web API等概念听上去好像很难,但其实并没有那么复杂。它仅仅是一种简单的客户端与服务端的关系:JavaScript中的XMLHttpRequest负责在客户端发起请求,而WebAPI负责在服务端返回响应。

章节内容:上一章节, 我们曾经用餐厅的例子来说明服务端和客户端,服务端就是厨房,而客户端是来用餐的人。而和第一章关注的是其中的一类厨房,看看它是如何运作的。

简述:
1.互联网浏览器发送的是对某个资源的请求。上网时,我们通过点击一个指向URL的链接,或者直接在浏览器中输入URL。我们在浏览器中使用的URL通常指向一个HTML资源,它让我们看到我们的网站。在这种情况下,我们所请求的资源的内容类型是text/html.
2.另一种与我们不直接相关的客户端-服务端关系是WebAPI。通常情况下,它所需要的是获取数据。在这一章,我们将着眼于一种请求JSON资源(一种内容为application/json)的客户端,以及为这类顾客服务的餐厅:Web API.

6.1 WebAPI

Web API 是通过HTTP服务进行交互的一组指令和标准。这些交互可以包括:创建post、读取get、更新put、删除delete (CRUD)等操作。

JavaScrip在幕后进行这些操作,例如在某个页面请求天气数据,称为异步操作。
异步操作:通常指发生在幕后的,不会中断主进程的操作。
JavaScript中的异步操作: "主进程"指的是Web浏览器的显示进程。
例如:某个新闻页面可能包含一个实时显示天气的数据的侧边栏,在阅读新闻的时候,后台代码会每隔60s异步更新显示数据,而这一操作并不需要刷新页面,也不会对你阅读代码产生任何影响。

**AJAX与AJAJ : **Asynchronous JavaScript and XML/JSON(异步的JavaScript 和 XML/JSON).

6.2 JavaScript中的XMLHttpRequest对象

JavaScript中的XMLHttpRequest:是客户端主动去获取资源的代码。
XMLHttpRequest 描述:能够使用HTTP协议(超文本传输协议),来发送请求的代码 就是 XMLHttpRequest。
JavaScript中的XMLHttpRequest对象:JavaScript 是一种面向对象语言,而 XMLHttpRequest 就是一类对象。当使用 new XMLHttpRequest() ,并将其返回值赋值给一个变量时,它就具有了从某一地址请求资源的功能。

例:JavaScript中的XMLHttpRequest对象:

var myXmlHttpRequest = new XMLHttpRequest();
上一篇 下一篇

猜你喜欢

热点阅读