Json指的是JavaScript对象表示法,是轻量级的文本数据交换格式,主要用于在服务器的Web应用程序之间传输数据;
基本格式:
var object1 = {
"language" : "Java",
"author" : "herbert schildt"
};
这种是对象格式;
var people = [
{"firstname" : "zheng", "lastname" : "jie"},
{"firstname" : "xia", "lastname" : "yang"},
{"firstname" : "xue", "lastname" : "qinaiqan"}
];
这种是对象数组格式;
常用的两种将字符串解析成Json对象方法有:
1、JSON.parse(str)
只能解析属性名用双引号包裹的对象;
function toJson(str){
return JSON.parse(str);
}
2、eval()
用法如下:
<script type="text/javascript">
var str = '{"name":"zjzjzj","age":18,"sex":"women"}';
var obj = eval('('+str+')');
for(var s in obj){
console.log(s+"="+obj[s]);
}
</script>
结果为:
注意到eval()的使用方法为:
eval('('+str+')')
原因是eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。
对于服务器返回的JSON字符串,如果jquery异步请求将type(一般为这个配置属性)设为“json”,或者利 用$.getJSON()方法获得服务器返回,那么就不需要eval()方法了,因为这时候得到的结果已经是json对象了,只需直接调用该对象即可;
3、new Function方法
function toJson(str){
var json = (new Function("return " + str))();
return json;
}
以上三种方法中,第二种用的比较多;
然后是JSON.stringify()是将Json对象又返回成原始字符串;
对象的删除方法:
var object = {
"name":"zjzjzj",
"age":18,
"sex":"women"
};
delete object.name;
使用delete关键字;
for-in遍历
上面介绍eval()方法时写过如下代码:
var str = '{"name":"zjzjzj","age":18,"sex":"women"}';
var obj = eval('('+str+')');
for(var s in obj){
console.log(s+"="+obj[s]);
}
此遍历方法,s指的是字符串,所以obj[s]就相当于obj["name"]之类的依次遍历;
JSON调用(简单实例)
通过JQuery利用ajax方法进行调用,提交和请求数据:
$.ajax({
url: "http://www.hzhuti.com", //请求的url地址
dataType: "json", //返回格式为json
async: true, //求是否异步,默认为异步,这也是ajax重要特性
data: {
"name":"zjzjzj",
"sex":"women",
"age":18}, //参数值,这里用的就是JSON的格式
type: "POST", //请求方式
beforeSend: function() {
//请求前的处理
},
success: function(req) {
//请求成功时处理
},
complete: function() {
//请求完成的处理
},
error: function() {
//请求出错处理
}
});
其中:
type:请求方式 GET/POST;
url:(默认: 当前页地址) 发送请求的地址;
async:布尔类型,默认为true 表示请求是否为异步,如果为false表示为同步;
dataType:预期服务器返回的数据类型;
data:发送到服务器的数据。将自动转换为请求字符串格式;
beforeSend:请求前处理;
success:调用成功执行的函数;
complete:请求完成处理;
error:异常处理函数;
反思:
JSON和Ajax配合使用,进行前后台的交互;暂时学习的只是基础的语法规范,以及实例使用,没有在真正的项目中使用过;所以掌握的不够好,后续遇到问题要记得不定时的补充完善;