您好,登錄后才能下訂單哦!
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 繼續發送請求
Firefox 繼續發送請求
IE瀏覽器 不再發送請求
怎么防止瀏覽器因為緩存而不發送請求呢?
在請求地址后面添加一個隨機數
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的數據交換、緩存問題和同步問題的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。