相对于XML来说,JSON的解析速度更快,文档更小。
JSON的格式
{属性名:属性值,属性名:属性值,……}
属性名的类型可以是string,number,boolean,null,object,且属性名必须用双引号引起来,如果属性值是字符串,也必须用双引号括起来。
JSON表示数组
格式:[value,value,value],其中value可以是基本的数据类型,也可以是object类型、数组类型
1
2
3
4
5
6
|
数组类型 [ {“name”:”yangjq”,”age”:22}, {“name”:”andreny”,”age”:21} ]; |
1
2
3
4
5
6
|
对象类型 [ “name”:”andreny”, “hobby”:[“sing”,”dance”,”eat”] ] |
转换
1
2
|
graph LR JSON字符串-->JavaScript对象 |
1.使用JavaScript的原生函数:eval(),不过此方法有危险,使用需谨慎。
1
2
3
|
var str={ "name" : "yangjq" , "age" : 23 }; var obj=eval( "(" +str+ ")" ); alert(obj.name); |
2.使用原生对象JSON提供的parse()方法,如果这个对象无效,说明你浏览器版本太低了!!!
1
2
3
|
var str={ "name" : "andreny" , "age" : 22 }; var obj=JSON.parse(str); alert(obj.name); |
3.使用JSON.js文件为字符串增加的方法。
1
2
3
|
var str={ "name" : "逗比的二哈" , "age" : 9 }; var obj=str.parseJSON(); alert(obj.name); |
JSON对象转换为JSON字符串
1
2
|
graph LR JSON对象-->JSON字符串 |
利用JSON官方提供的API:JSONObject,JSONArray提供的方法
1
2
3
4
5
6
7
8
9
10
|
//第一种方式 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 继续发送请求
Firefox 继续发送请求
IE浏览器 不再发送请求
怎么防止浏览器因为缓存而不发送请求呢?
在请求地址后面添加一个随机数
1
|
xhr.open( 'get' ,'getNumber. do ?+Math.random(), true ); |
发送post请求
关于同步的一些问题
在发送同步请求后,浏览器要等待服务器的响应到达后才能继续在页面中操作。AJAX在发送同步请求的时候,浏览器会锁定当前页面。
测试代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
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); } } } |
运行结果:
1
2
3
4
5
6
7
8
9
10
11
|
--------------- { "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的数据交换、缓存问题和同步问题的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
原文链接:http://blog.csdn.net/sinat_15274667/article/details/51468883