浅谈JSON的数据交换、缓存问题和同步问题
JSON轻量级的数据交换格式
相对于XML来说,JSON的解析速度更快,文档更小。
JSON的格式
{属性名:属性值,属性名:属性值,……}
属性名的类型可以是string,number,boolean,null,object,且属性名必须用双引号引起来,如果属性值是字符串,也必须用双引号括起来。
JSON表示数组
格式:[value,value,value],其中value可以是基本的数据类型,也可以是object类型、数组类型
数组类型
[
{“name”:”yangjq”,”age”:22},
{“name”:”andreny”,”age”:21}
];
对象类型 [ “name”:”andreny”, “hobby”:[“sing”,”dance”,”eat”] ]
转换
graphLR JSON字符串-->JavaScript对象
1.使用JavaScript的原生函数:eval(),不过此方法有危险,使用需谨慎。
varstr={"name":"yangjq","age":23};
varobj=eval("("+str+")");
alert(obj.name);
2.使用原生对象JSON提供的parse()方法,如果这个对象无效,说明你浏览器版本太低了!!!
varstr={"name":"andreny","age":22};
varobj=JSON.parse(str);
alert(obj.name);
3.使用JSON.js文件为字符串增加的方法。
varstr={"name":"逗比的二哈","age":9};
varobj=str.parseJSON();
alert(obj.name);
JSON对象转换为JSON字符串
graphLR JSON对象-->JSON字符串
利用JSON官方提供的API:JSONObject,JSONArray提供的方法
//第一种方式
Empemp=newEmp("1","andreny","man");
JSONObjectobj=JSONObject.fromObject(emp);
StringjsonStr=obj.toString();
//第二种方式
varobj={"name":"yangjq","age":23};
varstr1=obj.toJSONString();
//第三种方式
varstr2=obj.JSON.stringify();
AJAX在发送请求时涉及的缓存问题
==注==:IE浏览器提供的AJAX对象在发送请求时会先检查是否访问过该地址,如果访问过,那么浏览器就不再发送请求。
不同浏览器对待缓存的机制
Chrome继续发送请求
Firefox继续发送请求
IE浏览器不再发送请求
怎么防止浏览器因为缓存而不发送请求呢?
在请求地址后面添加一个随机数
xhr.open('get','getNumber.do?+Math.random(),true);
发送post请求
关于同步的一些问题
在发送同步请求后,浏览器要等待服务器的响应到达后才能继续在页面中操作。AJAX在发送同步请求的时候,浏览器会锁定当前页面。
测试代码
packageyangjq.test;
importjava.util.ArrayList;
importjava.util.List;
importnet.sf.json.JSONArray;
importnet.sf.json.JSONObject;
importyangjq.entity.Friend;
publicclassJSONtest{
publicstaticvoidmain(String[]args){
System.out.println("---------------");
test1();
test2();
test3();
test4();
}
//java对象转换为json字符串
publicstaticvoidtest1(){
Friendf=newFriend();
f.setName("andreny");
f.setAge(23);
JSONObjectobj=JSONObject.fromObject(f);
System.out.println(obj.toString());
}
//JSON集合转换为JSON字符串
publicstaticvoidtest2(){
Listfs=newArrayList();
for(inti=0;i<10;i++){
Friendf=newFriend();
f.setName("yangjq"+i);
f.setAge(12+i);
fs.add(f);
}
JSONArrayja=JSONArray.fromObject(fs);
System.out.println("-----JSON集合转换为JSON字符串------\n"+fs);
System.out.println(ja.toString());
}
//JSON字符串转换为java对象
publicstaticvoidtest3(){
StringjsonStr="{\"name\":\"andreny\",\"age\":22}";
JSONObjectobj=JSONObject.fromObject(jsonStr);
Friendfriend=(Friend)JSONObject.toBean(obj,Friend.class);
System.out.println("-------JSON字符串转换为java对象------\n"+obj.toString());
System.out.println(friend);
}
//JSON字符串转换为java集合
publicstaticvoidtest4(){
StringjsonStr="[{\"name\":\"yangjq\",\"age\":22},"+
"{\"name\":\"andreny\",\"age\":23}]";
JSONArrayobj=JSONArray.fromObject(jsonStr);
Listfriends=(List)JSONArray.toCollection(obj,Friend.class);
System.out.println("--------JSON字符串转换为java集合---------");
for(Friendf:friends){
System.out.println(f);
}
}
}
运行结果:
---------------
{"age":23,"name":"andreny"}
-----JSON集合转换为JSON字符串------
[Friend[name=yangjq0,age=12],Friend[name=yangjq1,age=13],Friend[name=yangjq2,age=14],Friend[name=yangjq3,age=15],Friend[name=yangjq4,age=16],Friend[name=yangjq5,age=17],Friend[name=yangjq6,age=18],Friend[name=yangjq7,age=19],Friend[name=yangjq8,age=20],Friend[name=yangjq9,age=21]]
[{"age":12,"name":"yangjq0"},{"age":13,"name":"yangjq1"},{"age":14,"name":"yangjq2"},{"age":15,"name":"yangjq3"},{"age":16,"name":"yangjq4"},{"age":17,"name":"yangjq5"},{"age":18,"name":"yangjq6"},{"age":19,"name":"yangjq7"},{"age":20,"name":"yangjq8"},{"age":21,"name":"yangjq9"}]
-------JSON字符串转换为java对象------
{"name":"andreny","age":22}
Friend[name=andreny,age=22]
--------JSON字符串转换为java集合---------
Friend[name=yangjq,age=22]
Friend[name=andreny,age=23]
总结
以上就是本文关于浅谈JSON的数据交换、缓存问题和同步问题的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!