JSON全称为:JavaScript Object Notation,中文为:Javascript对象表示法。是Douglas Crockford在2006年作为IETF RFC 4627提交给IETF,它是利用了Javascript中的一些结构模式来表示结构化数据。
目前浏览器都支持JSON数据格式,并提供了原生的JSON对象,JSON对象的语法可以表示以下三种类型的值,但是不支持Javascript中的函数、变量、对象实例:
1、简单值:可以为数值、字符串、布尔值、null,但是不支持undefined值。
如:1,”char”,true,null
2、对象:可以为Javascript里的对象形式的值,在Javascript里面的对象属性名用引号或者不用引号,但是在JSON中必须用双引号包围属性名。
如:{“Name”: “Nichole"}
3、数组,可以为Javascript里的数组形式的值
如:[15,true,false,”char"]
通过这些类型可以组成更加复杂的类型,可以在对象里面嵌套数组,数组里面嵌套对象,或者对象嵌套对象、数组嵌套数组,如:
1 [ {
“name”: “Nikds”,
“site”: [ “New York”, “Beijing" ],
“age”: 29
},
{
“name”: “Wang”, “site”: [ “Hunan”, “Beijing" ],
“age”: 24
},
{ “name”: “Jack”, “site”: [ “Sichuan”, “Guangzhou" ],
“age”: 21
} ]
JSON对象提供了两个方法分别为:
用于将Javascript对象序列化为JSON字符串,它接受三个参数,第一个为需要转换为JSON字符串的对象;第二个为过滤器可以为函数、数组;第三个参数为数值或者字符串来缩进或者填充,如下实例:
var ne1 = {
"name": "Nikds",
"site": [ "New York", "Beijing" ],
"age": 29
};
JSON.stringify(ne1)
"{"name":"Nikds","site":["New York","Beijing"],"age":29}” //输出结果
JSON.stringify(ne1,["site","age"]) //过滤器输入数组,只会输出在数组内的出现的字符串的属性名和值。
"{"site":["New York","Beijing"],"age":29}” //输出结果
JSON.stringify(ne1,function(key,value){
//通过函数过滤器来过滤数据,数据是根据函数返回的值来序列化数据的。函数如果返回undefind那么相应的属性就会被忽略,在其尾部一定要提供default,这样可以保证其他数据能正常输出。
switch(key){ case ’name’: return value = ‘Jacki’; case ’age’: return value = ’40'; default: return value; }; });
"{"name":"Jacki","site":["New York","Beijing"],"age":"40”}” //输出结果
JSON.stringify(ne1,[“site”,”age”],4)
//过滤器输入数组,只会输出在数组内的出现的字符串的属性名和值,并且设置第三个值来控制结果中的空白和缩进,这样有助于代码的可阅读性。但是所有类型的缩进都不能超过10个字符,如果超过都会截掉10后们的字符串,以及大于10的数值会转换为10数值。
“{//输出结果 "site":["New York","Beijing"], "age":29 }”
JSON.stringify(ne1,[“site”,”age”],”---") 也可以输入字符串来控制阅读性。
“{ //输出结果 ----"site":["New York","Beijing"], ----"age":29 }”
用于将JSON对象解析为Javascript对象,它接受两个个参数,第一个参数是需要转换为javascript对象的JSON数据,第二个参数是一个函数,函数接受两个值,一个是键一个是对应的值,为了区别该函数和stringify方法,把该方法称为还原函数。 函数接受两个值,如果函数返回undefind,则从结果中删除相应的键值,如果返回其他值,则将该值插入结果中。 在JSON中,是不能保存对象、函数、变量的,所以当我把一个new Date()转换为JSON格式是保存的一个字符串
var jsontext = '{"firstname":"Jesper","surname":"...e":["555-0100","555-0120"],"year":"2011,11,3"}';
JSON.parse(jsontext,function(key,value) {
if(key == "year") {
return new Date(value)
} else {
return value};
});