Json是一种数据格式,不是编程语言,语法形式和js一样
最重要的四点,bug通常地方:
1.没有变量申明 2.没有末尾的分号,逗号等所有符号 3.对象的属性必须加 “双引号” !
语法:
简单值: 字符串,数值,布尔值和null,不支持undefined
5 数值类型
"Hello word" 字符串类型 (字符串必须用 "双引号" )
复杂型> 对象:
js中的写法:
var person={
name:"Nicholas",
age:29,
};
json中的写法:
{
"name":"Nicholas",
"age":29,
}
json中 1.没有变量申明 2.没有末尾的分号 3.对象的属性必须加 “双引号” !
也可以在对象里面嵌入复杂类型的数据:
{
"name":"Nicholas",
"age":29,
"school":{
"name":"webbing",
"age":20,
}
}
复杂型> 数组:
js中的写法:
var values=[25,"hi",true];
json中的写法:
[25,"hi",true]
同样的 1.没有变量申明 2.没有末尾的分号 3. “双引号” !
json中数组和对象结合起来可以构成更复杂的数据集合,对象和数组通常是json数据结构的最外层:
[
{
"title":"professional JavaScript",
"authors":[
"Nicholas C. Zakas"
],
"edition":3,
"yeah":2011,
},
{
"title":"professional JavaScript",.
"authors":[
"Nicholas C. Zakas"
],
"edition":2,
"yeah":2008,
},
]
解析与序列化
JSON.stringify()
使用JSON.stringify()把一个js对象序列化为一个json字符串,然后保存在jsonText中
var book={
title:"javaScript",
year:2011,
};
var jsonText=JSON.stringify(book);
jsonText中的字符串是
{title:"javaScript",year:2011,}
在序列化js对象时,所有的空格,缩进和undefined都会被跳过,结果中最终都是有效的json数据类型的属性
JSON.stringify()除了序列化js对象外,还可以接收两个参数:
第一个参数是过滤器,可以是一个数组,也可以是一个函数
var book={
title:"javaScript",
"authors":[
"webbing"
],
edition:3,
year:2011,
};
var jsonText=JSON.stringify(book,["title","year"]);
返回的字符串:
{title:"javaScript",year:2011,}
第二个参数是一个选项,表示JSON字符串中是否保留缩进
var book={
title:"javaScript",
"authors":[
"webbing"
],
edition:3,
year:2011,
};
第二个参数可以填数值,最大不能超过10,超过只会出现10个缩进
var jsonText=JSON.stringify(book,null,4);
也可以填字符串,用字符串代替空格
var jsonText=JSON.stringify(book,null,"--");
JSON.parse()
将json字符串直接传递给JSON.parse()就可以得到相应的js值
如果传给JSON.parse()的字符串不是有效的JSON,该方法会报错
var bookcopy=JSON.parse(jsonText);
toJSON
toJSON() 方法可以将 Date 对象转换为字符串,并格式化为 JSON 数据格式。
返回字符串的 Date 对象,并格式化为 JSON 数据:
var d=new Date();
var n=d.toJSON();
n 输出结果:
2018-01-15T12:11:54.651Z
JSON中的用法:
var book={
"title":"JavaScript",
toJSON:function(){
return this.title;
};
};
var jsonText=JSON.stringify(book);