JSON
-
定義:JSON(JavaScript Object Notation, JS 物件簡譜)是一種輕量級的資料交換格式。它基於 ECMAScript(歐洲計算機協會制定的 JS 規範)的一個子集,採用完全獨立於程式語言的文字格式來儲存和表示資料。簡潔和清晰的層次結構使得 JSON 成為理想的資料交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提升網路傳輸效率。
-
語法:
-
基本規則
- 資料在名稱/值對中:json資料是由鍵值對構成的
- 鍵用引號(單雙都行)引起來,也可以不使用引號
- 值得取值型別:
- 數字(整數或浮點數 number)
- 字串(在雙引號中 string)
- 邏輯值(true 或 false)
- 陣列(在方括號中) {"persons":[{},{}]}
- 物件(在花括號中) {"address":{"province":"陝西"....}}
- null
- 資料由逗號分隔:多個鍵值對由逗號分隔
- 花括號儲存物件:使用{}定義json 格式
- 方括號儲存陣列:[]
-
獲取資料:
- json物件.鍵名
- json物件["鍵名"]
- 陣列物件[索引]
-
遍歷
//1.定義基本格式 var person = {"name": "張三", age: 23, 'gender': true}; var ps = [{"name": "張三", "age": 23, "gender": true}, {"name": "李四", "age": 24, "gender": true}, {"name": "王五", "age": 25, "gender": false}]; //獲取person物件中所有的鍵和值 //for in 迴圈 /* for(var key in person){ //這樣的方式獲取不行。因為相當於 person."name" //alert(key + ":" + person.key); alert(key+":"+person[key]); }*/ //獲取ps中的所有值 for (var i = 0; i < ps.length; i++) { var p = ps[i]; for(var key in p){ alert(key+":"+p[key]); } }
-
-
JSON物件和JS物件的轉化
-
JSON 字串轉 JS 物件
var js物件 = JSON.parse(json物件);
-
JS 物件轉 JSON 字串
var json物件 = JSON.stringify(js物件);
// 寫 JSON,這個格式的字串裡面存一個員工資料 id 1 name zs age 18 var json1 = '{"id":1,"name":"zs","age":18}'; // JSON // 寫 JSON,這個格式的字串裡面存兩個個員工資料 var json2 = '[{"id":1,"name":"zs","age":18}, {"id":2,"name":"ls","age":19}]'; // 寫 JSON,這個格式的字串裡面存一個員工資料 var json3 = '{"id":1, "name":"zs", "age":18, "dept":{"id":5,"name":"開發部"}}'; var jsObj1 = {"id":1, "name":"zs", "age":18}; // JS 物件 var jsObj2 = {id:1, name:"zs", age:18}; // JS 物件 console.log(json1.name); // undefined console.log(jsObj1.name); // zs console.log(jsObj2.name); // zs // JSON 字串轉 JS 物件 console.log(JSON.parse(json1).age); console.log(JSON.parse(json2)); console.log(JSON.parse(json3).dept.name); // JS 物件轉 JSON 字串 console.log(JSON.stringify(jsObj2)); var json4 = "{'id':1,'name':'zs','age':18}"; // 錯誤格式的 JSON console.log(JSON.parse(json4)); // 報錯
-
-
JSON與JAVA物件的轉換
開發中一般都會使用第三方的一些 JSON 操作的依賴或者 JAR 包來來完成 Java 物件與 JSON 字串之間的轉換。在 Java 中,轉換 JSON 的依賴或者 JAR 有很多,這裡單講兩種常用:
- Jackson:在 Spring MVC 中內建支援她,速度也挺快,穩定性比較好。
- Fastjson:阿里出品,號稱是 Java 領域中轉換 JSON 最快的一個外掛,中文文件比較齊全。
-
Jackson
1.0. 使用步驟
-
匯入jackson的相關jar包,或者依賴
-
建立Jackson核心物件 ObjectMapper
-
呼叫ObjectMapper的相關方法進行轉換
-
轉換方法:
-
writeValue(引數1,obj):將java物件轉為json字串,並將字串返回到:以下幾個引數的各個功能。
引數1:
File:將obj物件轉換為JSON字串,並儲存到指定的檔案中 Writer:將obj物件轉換為JSON字串,並將json資料填充到字元輸出流中
OutputStream:將obj物件轉換為JSON字串,並將json資料填充到位元組輸出流中
-
writeValueAsString(obj):將java物件轉為json字串,並返回一個字串
-
readValue(String content, Class
valueType):將json字串轉換為Java物件
-
-
1.1. 引入依賴
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.6</version> </dependency>
1.2 API使用
public class Department { private Long id; private String name; private String sn; getXxx()方法/setXxxx()方法 }
public class JsonTest { @Test public void testJackson() throws IOException { Department department = new Department(); department.setId(1L); department.setName("小豬"); department.setSn("sn111"); ObjectMapper mapper = new ObjectMapper(); //序列化:將java物件轉化為Json格式的字串 String str = mapper.writeValueAsString(department); //{"id":1,"name":"小豬","sn":"sn111"} System.out.println(str); //將Json物件寫入java物件中 String str1 = "{\"id\":1,\"name\":\"啦\",\"sn\":\"sn111\"}"; Department dept = mapper.readValue(str1, Department.class); System.out.println(dept.getName());//啦 } }
-
-
Fastjson
2.0 使用步驟:
-
匯入fastjson的相關jar包,或者依賴
-
使用JSON類的靜態方法
-
public static String toJSONString(Object object):將java物件轉換為 json字串;
-
public static
T parseObject(String text, Class clazz):將json字 符串轉換為Java物件;
-
2.1 引入依賴
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency>
2.2 AOP使用
public class JsonTest { @Test public void testFastJson(){ Department department = new Department(); department.setId(1L); department.setName("小豬"); department.setSn("sn111"); //序列化:將java物件轉化為Json格式的字串 String str = JSON.toJSONString(department); System.out.println(str); String str2 = {\"id\":1,\"name\":\"ajax\",\"sn\":\"sn111\"}"; Department dept = JSON.parseObject(str2, Department.class); //將Json物件寫入java物件中 System.out.println(dept.getName());//ajax } }
-
AJAX
1.概念
ASynchronous JavaScript And XML 非同步的JavaScript 和 XML
AJax 是一種在無需重新載入整個網頁的情況下,能夠更新部分網頁的技術。 通過在後臺與伺服器進行少量資料交換,Ajax 可以使網頁實現非同步更新。這意味著可以在不重新載入整個網頁的情況下,對網頁的某部分進行更新,提升使用者的體驗。傳統的網頁(不使用 Ajax)如果需要更新內容,必須過載整個網頁頁面。
2.非同步和同步
非同步和同步:客戶端和伺服器端相互通訊的基礎上
- 同步:客戶端必須等待伺服器端的響應。在等待的期間客戶端不能做其他操作。
- 非同步:客戶端不需要等待伺服器端的響應。在伺服器處理請求的過程中,客戶端可以進行其他的操作。
3. AJAX缺陷
- AJAX 大量使用了 Javascript 和 AJAX 引擎,而這個取決於瀏覽器的支援。IE5.0 及以上、
Mozilla1.0、NetScape7 及以上版本才支援,Mozilla 雖然也支援 AJAX ,但是提供XMLHttpRequest 的方式不一樣。所以,使用 AJAX 的程式必須測試針對各個瀏覽器的相容性。 - AJAX 更新頁面內容的時候並沒有重新整理整個頁面,因此,網頁的後退功能是失效的;有的使用者還經
常搞不清楚現在的資料是舊的還是已經更新過的。這個就需要在明顯位置提醒使用者“資料已更新”。 - 對流媒體的支援沒有 Flash、Java Applet 好。AJAX 不支援跨域訪問,更多參見。
4. Jquery實現方式
-
$.ajax()
-
語法:$.ajax({鍵值對});
//使用$.ajax()傳送非同步請求 $.ajax({ //請求路徑 url:'', //請求方式:POST/GET type:"POST", //同步還是非同步(true非同步預設,false同步) async:true, //傳的引數,如果沒有引數,直接寫{} data:{"username":"jack","age":23}, /* 當伺服器正常應答時,呼叫suceess對應的方法 方法中obj為引數,可以起任何名字,代表伺服器傳遞的引數 */ success:function (data) { alert(data); }, error:function () { alert("出錯啦..."); },//表示如果請求響應出現錯誤,會執行的回撥函式 dataType:"text"//設定接受到的響應資料的格式 });
-
$.get():傳送get請求
- 語法:$.get(url, [data], [callback], [type])
- 引數:
- url:請求路徑
- data(可選):請求引數
- callback(可選):回撥函式
- type(可選):響應結果的型別
- 引數:
- 語法:$.get(url, [data], [callback], [type])
-
$.post():傳送post請求
- 語法:$.post(url, [data], [callback], [type])
- 引數:
- url:請求路徑
- data(可選):請求引數
- callback(可選):回撥函式
- type(可選):響應結果的型別
- 引數:
- 語法:$.post(url, [data], [callback], [type])
-