JSON学习

1. 什么式JSON?
 JSON是存储和交换文本信息的语法,类似XML。
 JSON比XML更小、更快,更易解析
 JSON是轻量级的文本数据交换格式
 JSON独立于语言(任何语言都可以使用JSON)
 JSON具有自我描述,更易理解
 JSON是在AJAX中代替XML交换数据的更佳方案*
2. JSON的语法

JSON是JavaScript对象表示语法的子集
JSON语法规则

  • JSON数据在名称/值对中
  • 花括号保存对象
  • 方括号保存数组

JSON的值可以是:

	数字(int、float)
	字符串(在双引号中)
  	对象(在花括号中)
	null

代码表示:
js中的对象表示:

var user={
name:"张三",
age:'30'
}

JSON对象表示:

{
"name":"张三",
"age":"30"
}

普通数组:

var arr=["aa",100,true]

JSON数组

["aaa",100,true]

数组对象嵌套使用:

[{
"name":"张三",
"age":"30"
},
{
"name":"张李四",
"age":"30"
},
{
"name":"王六子",
"age":"30"
}]
3. JSON的解析

一般情况json数据都是从服务端获取到的,获取的JSON都是以字符串的形式返回的,这个字符串虽然是JSON格式的,但是不能被直接使用,我们必须将该字符串转换伪一个对象才能正常的解析

  1. JavaScript 函数eval()可用于将JSON文本转换为Javascript对象
    eval()函数可编译并执行任何JavaScript代码,存在一个潜在的安全性问题,(有恶意代码也会被执行)
  2. 使用JSON解析器将JavaScript对象是更安全的做法,JSON解析器只会识别JSON文本,而不会执行。

JSON的解析:JSON数据转换为js对象

语法:var myJson=JSON.parse(myJSONtext,revier)

JSON的序列化:JS对象(字符串)转换为JSON数据

语法:var myJSONtext=JSON.stringify(myJson,relpacer)

实例:实际使用的时候JSON数据需要从服务器加载,

var jsonstr='[{
"name":"张三",
"age":"30"
},
{
"name":"张李四",
"age":"30"
},
{
"name":"王六子",
"age":"30"
}]';
alert(typeof (jsonstr))//string类型

解析无参数时:json数据转换为js对象

var jsonobj=JSON.parse(jsonstr)
alset(typeof (jsonobj))//object

访问:

alert(jsonobj[0].age)//30

有可选参数:

var jsonobj=JSON.parse(jsonstr,function(key,value){
	if(key=='name'){
		return 'VIP会员'+value
	}else{
		return value}
	})
	alert(jsonobj[0].name)//VIP会员张三
	alert(jsonobj[0].age)//30

序列化:

var jsonobj=[
{
"name":'aaaa',
"age":"30",
"lv":"2"
},{
"name":'bbb',
"age":"30",
"lv":"2"
},{
"name:'ccc',
"age":"30",
"lv":"2"
}
]
alert(jsonobj[0].name)//aaaa

无可选参数:

var jsonstr=JSON.stringify(jsonobj)
alert(typeof(jsonstr))//obj
  • 可选参数可以是数组,表示输出json对象中只包含数组中含有的属性
  • 也可以是匿名函数
var jsonstr=JSON.stringify(jsonobj,['name'])
alert(jsonstr)//[{name:'aaaa'},{name:'bbb'},{name:'ccc'},]
var jsonstr=JSON.stringify(jsonobj,function(key,value){
	if(key=='lv'){
		return '等级为:'+value
	}else{
		return value
	}
});
alert(jsonstr)//[{"name":'aaaa',"age":'30',"lv":'等级为:2'},{"name":'bbb',"age":'30',"lv":'等级为:2'},{"name:'ccc',"age":'30',"lv":'等级为:2'}
]
  • 第三个参数表示缩进的字符数:
var jsonstr=JSON.stringify(jsonobj,null,4);
alert(jsonstr)
//结果为:
[
	{
		"name":'aaaa',
		"age":"30",
		"lv":"2"
	},
	{
		"name":'bbb',
		"age":"30",
		"lv":"2"
	},
	{
		"name:'ccc',
		"age":"30",
		"lv":"2"
	}
]

JSON语法创建对象:

var people={
	name:'张三',
	age:30,
	say:function(){
		alert('我的名字是'+this.name);
			}
		}
	alert(people.name)//张三
	people.say()//我的名字是张三

定义一个坐标x:100,y:100,r:15的圆
var circle={x:100,y:100,r:15};
alert(circle.x,circle.y,circle.r)//100,100,15
嵌套JSON对象的定义(语法简单,不适用于创建多个对象):

var club={
VIP:1,
sex:'男',
user1:{
name:"张三",
job"工程师",
say:function(){
document.write(this.name+"职业是:"+this.job)}
},
user2:{
name:"李四",
job:"老师",
say:function(){
document.write(this.name+"职业是:"+this.job)}
}
}
club.user1.say()//张三职业是工程师

命名冲突的解决:

var a={
get:function(){
alert("我是A的方法")
}
}
var b={
get:function(){
alert("我是B的方法")
}
}
//调用的时候:
a.get()//

实例:JSON数据输出到表格中
(1)JSON数据的解析 (2)表格的动态输出
JSON数据:

var jsonstr='[
{"name":'aaaa',"age":'30',"lv":'等级为:2'
},{"name":'bbb',"age":'30',"lv":'等级为:2'
},{"name:'ccc',"age":'30',"lv":'等级为:2'}
]'
function textJson(){
var jsonobj=JSON.parse(jsonstr)
alert(jsonstr)
'[
{"name":'aaaa',"age":'30',"lv":'等级为:2'
},{"name":'bbb',"age":'30',"lv":'等级为:2'
},{"name:'ccc',"age":'30',"lv":'等级为:2'}
]
alert(jsonobj)[object,object],[object,object],[object,object]
}

function output(o){
	document.write('<table><tr><th>key<th><th>value</th></tr>')
		for(var i in o){
			for(var j in o[i]){
				document.write('<tr><td>'+j+'</td><td>'+o[i][j]+'</td></tr>')
								}
						}
				}
	document.write('</table>')
	textJson();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值