写在前面:
本人自学前端不久,博客的【学习笔记】既不算原创也不算转载,都是自己通过各个网站、博客、书籍、视频课程等学习的笔记。
JSON(JavaScript Object Notation——JS 对象 表示法)
JSON 是存储和交换文本信息的语法;是轻量级的文本数据交换格式;
用JS语法来描述数据对象,但JSON仍然独立于语言和平台,JSON解析器和JSON库支持许多不同编程语言;
JSON文件的类型是"xxx.json",JSON文本的MIME类型是"application/json";
JSON的语法可以表示以下三种类型的值:
1、简单值:字符串、数值、布尔值、null,JSON不支持undefined
2、对象:无序键值对
js中:
var obj={
name:"Nick",
age:29
};
name:"Nick",
age:29
};
JSON表示:
{
"name":"Nick",
"age":29
}
"name":"Nick",
"age":29
}
JSON对象无声明变量,JSON中没有变量的概念,没有末尾的分号,属性必须加上“”
3、数组:有序的值的列表
注:JSON不支持变量、函数、对象的实例
【解析与序列化】
ECMAScript5定义了全局对象JSON,支持的浏览器有IE 8+、Firefox 3.5+、Safari 4+、Chrome、Opera 10.5+。
JSON对象有两个方法:stringify()用于把对象序列化为JSON字符串,parse()用于把JSON字符串解析为原生js值。
stringify()输出的字符串不包含任何空格字符或缩进,所有函数及原型成员都会被忽略,值为undefined的任何属性也被跳过。
三个参数stringify(js对象,过滤器(数组/函数),是否保留缩进)
过滤器为数组,要在每个级别缩进4个空格时,如:
var jsonText=JSON.stringify(obj,["name","age"],4);
数值表示每个级别缩进的空格时,最大为10,超过10自动转换为10,也可以是字符串,不超过10字符长。
过滤器为函数时如:
var jsonText=JSON.stringify(obj,function(key,value){
switch(key){
case "age":
return 29;
case "name":
return undefined;//相应属性会被忽略
default:
return value;
}
},"--");
toJSON()方法:
给对象定义toJSON()方法,返回自身JSON数据格式。
原生Date对象有一个toJSON()方法,将js的Date对象转换成ISO8601日期字符串(同Date对象调用toISOString())。
不需要解析器,JS能使用内建eval对象,用JSON数据来生产原生js对象,可使用Ajax进行传输。
JSON最常见用法之一,是从web服务器上读取JSON数据(作为文件或作为HttpRequest),将JSON转换为JS对象然后再网页中使用该数据。
var txt='{"emploees":[{"firstName":"Bill","lastName":"Gates"},{"firstName":"George","lastName":"Bush"}]}';
var obj=eval("("+txt+")");
document.getElementById("firstname").innerHTML=obj.emploees[1].firstName;//"George"
//把文本包围在括号中避免语法错误