JSON的全称是javascript object notation (javascript对象表示法)
在json的名称-值对中,名称始终被双引号包裹
json的媒体类型是application/json
json中的数据类型包括:对象、字符串、数字、布尔值、null和数组
json值中如有双引号,加反斜线来进行转义。
反斜线需要另一个反斜线来转义
在编程中,null 就用来表示 0、一无所有、不存在等意思,而不用数字来表示。由于手表颜色的值也是不能被定义的,所以使用 null 来描述。
不要把 null 和 undefined 混淆,尤其是在使用 JavaScript 时。undefined 不是 JSON 中的数据类型,而在 JavaScript 中,undefined 是在尝试获取一些不存在的对象或变量时返回的结果。在 JavaScript 中,undefined 与那些声明的名称和值都不存在的对象或变量有关,而 null 则仅与对象或变量的值有关。null 是一个表示“没有值”的值。在 JSON 中,null 必须使用小写形式。
在json的名称-值对中,名称始终被双引号包裹
json的媒体类型是application/json
json中的数据类型包括:对象、字符串、数字、布尔值、null和数组
json值中如有双引号,加反斜线来进行转义。
反斜线需要另一个反斜线来转义
在编程中,null 就用来表示 0、一无所有、不存在等意思,而不用数字来表示。由于手表颜色的值也是不能被定义的,所以使用 null 来描述。
不要把 null 和 undefined 混淆,尤其是在使用 JavaScript 时。undefined 不是 JSON 中的数据类型,而在 JavaScript 中,undefined 是在尝试获取一些不存在的对象或变量时返回的结果。在 JavaScript 中,undefined 与那些声明的名称和值都不存在的对象或变量有关,而 null 则仅与对象或变量的值有关。null 是一个表示“没有值”的值。在 JSON 中,null 必须使用小写形式。
获取对象的属性
var jsonString = '{"animal":"cat"}';
var myObject = eval("(" + jsonString + ")");
alert(myObject.animal);
使用
JSON.parse()
代替eval()
var jsonString = '{"animal":"cat"}';
var myObject = JSON.parse(jsonString);
alert(myObject.animal);
不那么规矩的 JSON
{
"message": "<div onmouseover=\"alert('gotcha!')\">hover here.</div>"
}
如何阻止这种情况呢?一方面,可以采取一些手段使得消息中不包含 HTML。可以在客户端和服务端都加上这一认证。此外,还可以将消息中所有的 HTML 字符进行转码,这样的话,诸如
<div>
这样的标签就会被转换成 <div>,然后插入页面(<div> 将不会是合法的 HTML)。所有 这些方法都可以在网站中用具体的代码在客户端和服务端实现。
-
在定位 JSON 安全问题时,应该记住以下三件事。
-
不要使用顶级数组。顶级数组是合法的 JavaScript 脚本,它们可以用
<script>
标签链接并使用。 -
对于不想公开的资源,仅允许使用 HTTP
POST
方法请求,而不是GET
方法。GET
方法可以通过 URL 来请求,甚至可以放在<script>
标签中。 -
使用
JSON.parse()
来代替eval()
。eval()
函数会将传入的字符串编译并执行,这会让你的代码易被攻击。应仅使用JSON.parse()
来解析 JSON 数据。
-
XMLHttpRequest
与 Web API 等概念听上去好像很难,但实际上并没有想象中那么复杂。它仅仅是一种简单的客户端与服务端的关系。JavaScript 中的
XMLHttpRequest
负责在客户端发起请求,而 Web API 负责在服务端返回响应。
JavaScript 在幕后进行的这些操作,如请求天气数据,称为异步操作。异步操作通常指那些发生在幕后的、不会中断主进程的操作。
在 JavaScript 的异步操作中,“主进程”指 Web 浏览器的显示进程。例如,一个新闻页面可能会包含一个实时显示天气数据的侧边栏。在阅读新闻时,后台的代码会每隔 60 秒异步更新显示的天气数据。而这一操作并不需要刷新页面,也不会在阅读文章时对页面滚动产生什么影响。页面中唯一发生变化的只是包含天气信息的侧边栏。
这里提到的 JavaScript 中的异步(后台)操作被称为 AJAX。AJAX 的全称是 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)