浅谈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”] ] 转换 graph LR JSON字符串-->JavaScript对象 1.使用JavaScript的原生函数:eval(),不过此方法有危险,使用需谨慎。 var str={"name":"yangjq","age":23}; var obj=eval("("+str+")"); alert(obj.name); 2.使用原生对象JSON提供的parse()方法,如果这个对象无效,说明你浏览器版本太低了!!! var str={"name":"andreny","age":22}; var obj=JSON.parse(str); alert(obj.name); 3.使用JSON.js文件为字符串增加的方法。 var str={"name":"逗比的二哈","age":9}; var obj=str.parseJSON(); alert(obj.name); JSON对象转换为JSON字符串 graph LR JSON对象-->JSON字符串 利用JSON官方提供的API:JSONObject,JSONArray提供的方法 //第一种方式 Emp emp=new Emp("1","andreny","man"); JSONObject obj=JSONObject.fromObject(emp); String jsonStr=obj.toString(); //第二种方式 var obj={"name":"yangjq","age":23}; var str1=obj.toJSONString(); //第三种方式 var str2=obj.JSON.stringify(); AJAX在发送请求时涉及的缓存问题 ==注==:IE浏览器提供的AJAX对象在发送请求时会先检查是否访问过该地址,如果访问过,那么浏览器就不再发送请求。 不同浏览器对待缓存的机制 Chrome 继续发送请求 怎么防止浏览器因为缓存而不发送请求呢? 在请求地址后面添加一个随机数 xhr.open('get','getNumber.do?+Math.random(),true); 发送post请求 关于同步的一些问题 在发送同步请求后,浏览器要等待服务器的响应到达后才能继续在页面中操作。AJAX在发送同步请求的时候,浏览器会锁定当前页面。 测试代码 package yangjq.test; import java.util.ArrayList; import java.util.List; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import yangjq.entity.Friend; public class JSONtest { public static void main(String[] args) { System.out.println("---------------"); test1(); test2(); test3(); test4(); } // java对象转换为json字符串 public static void test1(){ Friend f=new Friend(); f.setName("andreny"); f.setAge(23); JSONObject obj=JSONObject.fromObject(f); System.out.println(obj.toString()); } // JSON集合转换为JSON字符串 public static void test2(){ List<Friend> fs=new ArrayList<Friend>(); for (int i=0;i<10;i++){ Friend f=new Friend(); f.setName("yangjq"+i); f.setAge(12+i); fs.add(f); } JSONArray ja=JSONArray.fromObject(fs); System.out.println("-----JSON集合转换为JSON字符串------n"+fs); System.out.println(ja.toString()); } // JSON字符串转换为java对象 public static void test3(){ String jsonStr="{"name":"andreny","age":22}"; JSONObject obj=JSONObject.fromObject(jsonStr); Friend friend=(Friend) JSONObject.toBean(obj,Friend.class); System.out.println("-------JSON字符串转换为java对象------n"+obj.toString()); System.out.println(friend); } // JSON字符串转换为java集合 public static void test4(){ String jsonStr="[{"name":"yangjq","age":22}," + "{"name":"andreny","age":23}]"; JSONArray obj=JSONArray.fromObject(jsonStr); List<Friend> friends=(List<Friend>) JSONArray.toCollection(obj,Friend.class); System.out.println("--------JSON字符串转换为java集合---------"); for (Friend f: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的数据交换、缓存问题和同步问题的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- RxJava. Observable.delay工作奇怪(最后缺少一些项目)
- Java List.contains()方法:判断列表中是否包含指定元素
- 远程mysql_java.sql.SQLException: null, message from ser
- 将Java文档添加到导出jar的Eclipse Project中
- Java平方根整数运算没有铸造?
- java – 包访问的抽象方法的继承
- Java连载38-对象封装性格式、构造方法
- java – 在Fragments中使用DIalogs
- java – 使用MatOfKeyPoint和feature2d检测的Android OpenC
- java – 为什么maven 2尝试下载我已经拥有的依赖项?