json 简介——迹忆客-ag捕鱼王app官网
简介
json(javascript object notation)是一种轻量级的数据交换格式。人们很容易阅读和编写。机器很容易解析和生成。 json 是一种完全独立于语言的文本格式,但使用 c 系列语言的程序员熟悉的约定,包括 c、 c 、c#、java、javascript、perl、python、php 等等。这些特性使 json 成为一种理想的数据交换语言。
json 数据格式与语言无关。即便它源自javascript,但目前很多编程语言都支持 json 格式数据的生成和解析。json 的官方 mime 类型是 application/json,文件扩展名是 .json。
json建构于两种结构:
- “名称/值”对的集合(a collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
- 值的有序列表(an ordered list of values)。在大部分语言中,它被理解为数组(array)。
数据类型
json的基本数据类型:
- 数值:十进制数,不能有前导0,可以为负数,可以有小数部分。还可以用e或者e表示指数部分。不能包含非数,如nan。不区分整数与浮点数。javascript用双精度浮点数表示所有数值。
- 字符串:以双引号""括起来的零个或多个unicode码位。支持反斜杠开始的转义字符序列。
- 布尔值:表示为true或者false。
- 值的有序列表(array):有序的零个或者多个值。每个值可以为任意类型。序列表使用方括号[,]括起来。元素之间用逗号,分割。形如:[value, value]
- 对象(object):若干无序的“键-值对”(key-value pairs),其中键是数值或字符串。建议但不强制要求对象中的键是独一无二的。对象以花括号{开始,并以}结束。键-值对之间使用逗号分隔。键与值之间用冒号:分割。
- null类型:值写为null
安全问题
读取json
由于json是javascript的子集,所以一般都会使用eval()作为读取资料的方式,如果是针对可靠的数据来源,在不支持原生json解析的浏览器上面这是最快速的方法。然而由于eval方法同样可以执行任意的javascript代码,因此当数据来源不可靠时则可能产生安全问题。如下面的例子,直接用eval执行时会跳转:
var json= eval("{message:(function (){ window.location='http://www.jiyik.com'; })()}");
其中一种防止不安全代码出现的解决办法,是通过浏览器原生支持的json.parse(str)方法读取json资料,目前已经得到大部分主流浏览器的支持(ie8 ,firefox 3.5 ,chrome4 /safari4 ,opera10 ),在不支持原生json对象的浏览器上面可以使用parsejson方法进行读取[2],parsejson采用解析器验证读入的代码是否真的是json代码,这样就更安全。但由于这是用模拟的方式读取,速度上会比eval()
慢。
跨站访问问题
另外一个安全上的问题则是跨站请求伪造(cross-site request forgery,简称csrf或xsrf)。这个问题在javascript中的状况是,由于javascript采用了称为“沙盒”的机制,这种机制限制javascript引擎仅能引入同一个站点的代码,因而某种程度上提高了安全性。
与 xml 相同之处
- json 是纯文本
- json 具有"自我描述性"(人类可读)
- json 具有层级结构(值中存在值)
- json 可通过 javascript 进行解析
- json 数据可使用 ajax 进行传输
与 xml 不同之处
- 没有结束标签
- 更短
- 读写的速度更快
- 能够使用内建的 javascript eval() 方法进行解析
- 使用数组
- 不使用保留字
为什么使用 json?
对于 ajax 应用程序来说,json 比 xml 更快更易使用:
使用 xml
- 读取 xml 文档
- 使用 xml dom 来循环遍历文档
- 读取值并存储在变量中
使用 json
- 读取 json 字符串
- 用 eval() 处理 json 字符串