1. JSON是一种常用的数据传输的格式,语法格式如下 :
JSON语法规则 :
- 1. 数据存储在键值对中,也就是属性/属性值的形式
- 2. 多个数据之间逗号隔开
- 3. 大括号用来表示对象
- 4. 中括号用来表示数组
数据类型 :
- JSON数字 : {"age":20}
- JSON布尔 : {"flag":true}
- JSON null: {"name":null}
- JSON对象 : {"name":"lisi","age":20} ,
- 值不能是方法/函数,也不能是undefined或者NAN
JSON对象语法如下:
- JSON 对象使用在大括号({})中书写。
- 对象可以包含多个 key/value(键/值)对。
- key 必须是字符串,value 可以是合法的JSON数据类型(字符串, 数字, 对象, 数组, 布尔值或 null),值不能是方法/函数,不能是undefined/NAN。
- key 和 value 中使用冒号(:)分割。
- 每个 key/value 对使用逗号(,)分割。
JSON数组 :
{
"courses":[
{"name":"JavaSE","time":20},
{"name":"HTML","time":1},
{"name":"CSS","time":2},
{"name":"JavaScript","time":3}
]
}
2. JSON中元素的访问 :
var movie = {
"title":"扫毒2:天地对决",
"casts": [
{
"name":"古天乐",
"avatar":"http://xxxx.jpg",
"age":49
},
{
"name":"刘德华",
"avatar":"http://xxxx2.jpg",
"age":58
}
],
"pubDate":"2029-07-5",
"rate":9.5
}
//属性访问 JSON对象名.属性
console.log(movie);
console.log('title : ' + movie.title);
console.log('casts : ' + movie.casts);
console.log('name : ' + movie.casts[0].name) ;
console.log('name : ' + movie.casts[0][name]) ;// 访问不到name
for(var i in movie.casts){
console.log(i) ;
console.log(movie.casts[i].name) ;
console.log(movie.casts[i].avatar) ;
console.log(movie.casts[i].age) ;
}
// 结果如下 :
//{title: "扫毒2:天地对决", casts: Array(2), pubDate: "2019-07-5", rate: 9.5}
//title : 扫毒2:天地对决
//casts : [object Object],[object Object]
//name : 古天乐
//name : undefined
//0
//古天乐
//http://xxxx.jpg
//49
//1
//刘德华
//http://xxxx2.jpg
//58
3. JSON与字符串的互转
- JSON对象---->String : 借助 : JSON.stringify(jsonObj)
var jsonString = JSON.stringify(movie) ;
console.log(jsonString) ;
//{"title":"扫毒2:天地对决","casts":[{"name":"古天乐","avatar":"http://xxxx.jpg","age":49},{"name":"刘德华","avatar":"http://xxxx2.jpg","age":58}],"pubDate":"2019-07-5","rate":9.5}
console.log(typeof jsonString) ;
//string
- String ----> JSON对象 : 借助 : JSON.parse(jsonString)
var movieString = '{"name":"张三","age":20}' ;// JSON的字符串格式
console.log(movieString.name) ;
// undifined
var movieObject = JSON.parse(movieString) ;
// 转换为JSON对象
console.log(movieObject.name) ;
4. JS遍历与JQuery遍历
- JS遍历方式 : 借助 JavaScript中 for...in循环
// JS对象
var user = {
name:'张三',
age: 20
}
// json类型对象
var userJson = {
"name":"李四",
"age":30
}
//对象遍历 ,for...in中的 i变量,可以理解为数组的索引值,所以访问时要用[]括起来.
for(var i in user){
//xx.xx 这种形式 只能取原来具有的属性
//非常重要! xx.abc abc是变量,就必须通过 xx[abc] 形式取值
console.log('属性 : '+i+' ==> '+user[i]);
}
//json遍历
for(var a in userJson){
console.log('属性 : '+a+' ==> '+userJson[a]);
}
- JQuery普通对象遍历方式 : 借助JQuery中的each函数,注意先引入JQuery文件, 附JQuery下载地址 : http://www.jq22.com/jquery-info122 JQuery在线文档 : https://jquery.cuishifeng.cn/
json普通对象的遍历 :
$.each(data,function(index,value){
});
// each(obj,callBack);
// obj : 对象或者数组
// callback : 回调函数
// index : 索引值
// value : 对象
// json类型普通对象
var userJson = {
"name":"李四",
"age":30
}
$.each(userJson,function(index,value){
console.log('index : ' + index) ;
console.log('value : ' + value) ;
}) ;
//结果如下 :
// index : name
// value : 李四
// index : age
// value : 30
// 可以看出 : 在普通JSON对象的遍历中index是键,value是值.
- JSON数组对象JQuery遍历方式
var jsonArray = {
"courses":[
{"name":"JavaSE","time":20},
{"name":"HTML","time":1},
{"name":"CSS","time":2},
{"name":"JavaScript","time":3}
]
}
$.each(jsonArray,function(index,value){
// 第一层遍历获取数组名和数组值
console.log('index : ' + index) ;
console.log('value : ' + value) ;
// 第二层对数组值进行遍历 : 获取到索引值和索引值对应的元素,该元素是JSON对象,通过 对象名.属性 的形式访问内容
$.each(value,function(i,v){
console.log('i : ' + i) ;
console.log('v : ' + v) ;
console.log(v.name) ;
console.log(v.time) ;
}) ;
}) ;
遍历结果如下 :
index : courses
value : [object Object],[object Object],[object Object],[object Object]
i : 0
v : [object Object]
name : JavaSE
time : 20
i : 1
v : [object Object]
name : HTML
time : 1
i : 2
v : [object Object]
name : CSS
time : 2
i : 3
v : [object Object]
name : JavaScript
time : 3
小结 : JQuery中的each(data,function(index,value){})函数,遍历JSON对象时,index就是键,value就是值;遍历到JSON数组时,index就是索引值,value就是索引值对应的元素.