前言
作为一个前端需要掌握一种数据格式:json数据格式。在和服务器交互时,服务器会返回一组json数据,前端需要处理这组数据,并选择性地将所需数据呈现在客户端。在json还没诞生前,互联网上传输结构化数据的方式是交给XML来完成的,那时候不少人认为XML过于繁琐、冗长,希望能有另一种数据格式可以替代XML。
什么是JSON
一句话:JSON就是(JavaScript Object Notation),它是一种轻量级的数据交换格式。
以下的语句就是JSON
{
"name":"bingkingboy",
"age":25
}
{
"first":{
"name":"bingkingboy",
"age":25
},
"second":{
"name":"feifei",
"age":20
}
}
工欲善其事必先利其器,要想了解JSON就必须知道它的语法,才能更好的学习它。
JSON的基本语法
JSON的四个基本规则:
- 并列的数据之间用逗号(“, “)分隔。
- 映射用冒号(“: “)表示。
- 并列数据的集合(数组)用方括号(“[]”)表示。
- 映射的集合(对象)用大括号(“{}”)表示。
知道了JSON的基本规则,就可以很容易的构建JSON数据格式
解析和序列化
JSON之所以流行,拥有与JavaScript类似的语法并不是全部原因,更重要的一个原因是,可以把JSON数据结构解析为有用的JavaScript对象。
JavaScript解析和序列化JSON的方法
evel()
早期的JSON解析器上基本就是使用JavaScript的evel()的函数,不过在使用evel()对JSON数据结构求值存在风险,因为可能会执行一些恶意代码,使用时需谨慎。stringify() 把JavaScript对象序列化为JSON字符串
JSON.stringify()除了要序列化的JavaScript对象外,还可以接收另外两个可选参数,这两个参数用于指定以不同方式序列化JavaScript对象。第一个参数是个过滤器,可以是数组,也可以是函数;第二个参数是一个选项,表示是否在JSON字符串中保留缩进。
var book = {
"title":"woaiwojia",
"authors":["weiwei","kuakua"],
"year":2010
}
var jsonText1 = JSON.stringify(book);
var jsonText2 = JSON.stringify(book,["title","year"]);
console.log(jsonText1);
console.log(jsonText2);
{"title":"woaiwojia","authors":["weiwei","kuakua"],"year":2010}
test5.html:17 {"title":"woaiwojia","year":2010}
- parse()
把JSON字符串解析为原生JavaScript值,JSON.parse()方法和JSON.stringify()刚好相反,不做举例。
JSON的优劣
优点:
- 格式比较简单,易于读写,格式都是压缩的,占用带宽小。
- 支持多种语言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Prel,
PHP, Python, Ruby等服务器端语言,便于服务器端的解析。
缺点:
- 要求字符集必须是Unicode,受约束性强。
- 语法过于严谨,必须遵守JSON语法的四个基本法则。