做外貿(mào)用哪個(gè)網(wǎng)站好數(shù)據(jù)分析工具
目錄
一、JSON概述
二、JSON對(duì)象語法
三、JSON序列化方法
四、JSON與XML比較
五、Java對(duì)象與Json對(duì)象的轉(zhuǎn)換
六、Js解析服務(wù)器發(fā)送過來的JSON字符串
七、$.getJSON()
一、JSON概述
JSON簡(jiǎn)介:JSON的全稱為JavaScript Object Nation(JavaScript 對(duì)象表示語法),基于 ECMAScript,存放的是的類似于鍵值對(duì),本質(zhì)上來說是javascript的數(shù)據(jù)類型,是一種輕量級(jí)的數(shù)據(jù)交互格式,簡(jiǎn)單來說呢,json就是一種在各個(gè)編程語言中流通的數(shù)據(jù)格式,負(fù)責(zé)不同編程語言中的數(shù)據(jù)傳遞和交互。
JSON是用字符串來表示Javascript對(duì)象,例如可以在Servlet中發(fā)送一個(gè)JSON格式的字符串給客戶端Javascript,Javascript可以執(zhí)行這個(gè)字符串,得到一個(gè)Javascript對(duì)象。
二、JSON對(duì)象語法
JSON 語法:
-
數(shù)據(jù)在名稱/值對(duì)中
-
數(shù)據(jù)由逗號(hào)分隔
-
花括號(hào)保存對(duì)象
-
方括號(hào)保存數(shù)組
var person = {"name":"zhangSan","age":"18", "sex":"male"};
注意:
key要在雙引號(hào)中,不能使用單引號(hào)
字符串必須使用雙引號(hào)表示,不能使用單引號(hào) ?
JSON值:
-
數(shù)字(整數(shù)或浮點(diǎn)數(shù))
-
字符串(在雙引號(hào)中)
-
邏輯值(true 或 false)
-
數(shù)組(在方括號(hào)中)
-
對(duì)象(在花括號(hào)中)
-
null
三、JSON序列化方法
在ES5中引用了JSON全局對(duì)象,該對(duì)象有兩個(gè)常用的方法:
1. parse方法:解析JSON字符串,轉(zhuǎn)回對(duì)應(yīng)的JavaScript類型;
JSON.parse(text[, reviver])
參數(shù)
text
:要被解析成 JavaScript 值的JSON字符串。
reviver
可選:轉(zhuǎn)換器,如果傳入該參數(shù) (函數(shù)),可以用來修改解析生成的原始值,調(diào)用時(shí)機(jī)在 parse 函數(shù)返回之前。
返回值
Object 類型,對(duì)應(yīng)給定 JSON 文本的對(duì)象/值。
異常
若傳入的字符串不符合 JSON 規(guī)范,則會(huì)拋出 SyntaxError 異常。
2.?stringify方法:將JavaScript類型轉(zhuǎn)成對(duì)應(yīng)的JSON字符串;
JSON.stringify(value[, replacer [, space]])
?
參數(shù)
value
:將要序列化成 一個(gè) JSON 字符串的值。
replacer
可選:如果該參數(shù)是一個(gè)函數(shù),則在序列化過程中,被序列化的值的每個(gè)屬性都會(huì)經(jīng)過該函數(shù)的轉(zhuǎn)換和處理;如果該參數(shù)是一個(gè)數(shù)組,則只有包含在這個(gè)數(shù)組中的屬性名才會(huì)被序列化到最終的 JSON 字符串中;如果該參數(shù)為 null 或者未提供,則對(duì)象所有的屬性都會(huì)被序列化。
space
可選:指定縮進(jìn)用的空白字符串,用于美化輸出(pretty-print);如果參數(shù)是個(gè)數(shù)字,它代表有多少的空格;上限為 10。該值若小于 1,則意味著沒有空格;如果該參數(shù)為字符串(當(dāng)字符串長(zhǎng)度超過 10 個(gè)字母,取其前 10 個(gè)字母),該字符串將被作為空格;如果該參數(shù)沒有提供(或者為 null),將沒有空格。
返回值
一個(gè)表示給定值的 JSON 字符串。
異常
-
當(dāng)在循環(huán)引用時(shí)會(huì)拋出異常TypeError ("cyclic object value")(循環(huán)對(duì)象值)
-
當(dāng)嘗試去轉(zhuǎn)換 BigInt 類型的值會(huì)拋出TypeError ("BigInt value can't be serialized in JSON")(BigInt 值不能 JSON 序列化).
四、JSON與XML比較
-
可讀性:XML勝出;
-
解碼難度:JSON本身就是JS對(duì)象(主場(chǎng)作戰(zhàn)),所以簡(jiǎn)單很多;
-
流行度:XML已經(jīng)流行好多年,但在AJAX領(lǐng)域,JSON更受歡迎。
五、Java對(duì)象與Json對(duì)象的轉(zhuǎn)換
fastjson是阿里巴巴的開源JSON解析庫,它可以解析JSON格式的字符串,支持將Java Bean序列化為JSON字符串,也可以從JSON字符串反序列化到JavaBean。
fastjson優(yōu)點(diǎn):速度快、使用廣泛、使用簡(jiǎn)單、功能完備、測(cè)試完備(之前爆了很多漏洞),現(xiàn)在使用fastjson至少升級(jí)到1.2.60版本
使用fastjson
在項(xiàng)目中導(dǎo)入fastjson的jar
fastjson的使用主要是三個(gè)對(duì)象:
-
JSON
-
JSONObject
-
JSONArray
JSONArray和JSONObject繼承JSON
1. JSON對(duì)象
JSON這個(gè)類主要用于轉(zhuǎn)換:
-
將Java對(duì)象序列化為JSON字符串
-
將JSON字符串反序列化為Java對(duì)象
T parseObject(String text, Class<T> clazz) //把json轉(zhuǎn)換為一個(gè)java對(duì)象 JSONObject parseObject(String text) // 把json轉(zhuǎn)換為一個(gè)JSONObject對(duì)象 List<T> parseArray(String text, Class<T> clazz) //把json轉(zhuǎn)換為一個(gè)List集合 JSONArray parseArray(String text) //把json轉(zhuǎn)換為一個(gè)JSONArray對(duì)象 String toJSONString(Object object) //把一個(gè)java對(duì)象轉(zhuǎn)換為json格式的字符串
2.?JSONObject
JSON對(duì)象(JSONObject)中的數(shù)據(jù)都是以key-value
形式出現(xiàn),所以它實(shí)現(xiàn)了Map
接口:
使用起來也很簡(jiǎn)單,跟使用Map
就沒多大的區(qū)別(因?yàn)樗讓訉?shí)際上就是操作Map
),常用的方法:
3.? JSONArray
JSONArray則是JSON數(shù)組,JSON數(shù)組對(duì)象中存儲(chǔ)的是一個(gè)個(gè)JSON對(duì)象,所以類中的方法主要用于直接操作JSON對(duì)象
六、Js解析服務(wù)器發(fā)送過來的JSON字符串
1. 服務(wù)器發(fā)送過來JSON字符串后,客戶端需要對(duì)其進(jìn)行解析。這時(shí)客戶端需要使用eval()方法對(duì)JSON字符串進(jìn)行執(zhí)行!但要注意,eval()方法在執(zhí)行JSON時(shí),必須把JSON字符串使用一對(duì)圓括號(hào)括起來。
var json = "{\"name\":\"zhangSan\", \"age\":\"18\", \"sex\":\"male\"}";
var person = eval("(" + json + ")");
alert(person.name + ", " + person.age + ", " + person.sex);
2.?我們也可以使用JQuery的parseJSON()函數(shù)來對(duì)json字符串進(jìn)行解析:
var json = "{\"name\":\"zhangSan\", \"age\":\"18\", \"sex\":\"male\"}";
var obj = $.parseJSON(json);
alert(person.name + ", " + person.age + ", " + person.sex);
七、$.getJSON()
在JQuery中除了可以將定義好的對(duì)象進(jìn)行輸出以外,還可以發(fā)送JSON格式的數(shù)據(jù)到服務(wù)器,或者接收從服務(wù)器返回的JSON格式數(shù)據(jù).這時(shí)通常需要使用JQuery提供的$.getJSON()方法,異步發(fā)送請(qǐng)求到服務(wù)器,并以JSON格式封裝客戶端與服務(wù)器之間傳遞的數(shù)據(jù),具體語法如下:
$.getJSON(url,data,success(result,status,xhr));
?