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]);
}
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就是索引值对应的元素.