Json學習一(基礎概念知識學習)

來源:互聯網
上載者:User

標籤:字串轉換   通用   eval   軟體   系統   二進位   lan   轉換   proc   

1.Json簡單介紹

JSON(JavaScript Object Notation)
是一種輕量級的資料交換格式。它使得人們非常easy的進行閱讀和編寫。

同一時候也方便了機器進行解析和產生。它是基於 JavaScript
Programming Language , Standard ECMA-262 3rd Edition - December 1999
的一個子集。 JSON採用全然獨立於程式語言的文字格式設定。可是也使用了類C語言的習慣(包括C, C++, C#, Java,
JavaScript, Perl, Python等)。這些特性使JSON成為理想的資料交換語言。

JSON基於兩種結構:

?“名稱/值”對的集合(A collection of name/value
pairs)。

不同的程式設計語言中,它被理解為對象(object),紀錄(record),結構(struct),字典(dictionary)。雜湊表(hash
table),有鍵列表(keyed list)。或者關聯陣列 (associative array)。

?值的有序列表(An ordered list of
values)。

在大部分語言中,它被實現為數組(array),向量(vector),列表(list),序列(sequence)。

這些都是常見的資料結構。眼下,絕大部分程式設計語言都以某種形式支援它們。這使得在各種程式設計語言之間交換相同格式的資料成為可能。
JSON具有下面這些形式:
對象(object) 是一個無序的“‘名稱/值’對”集合。一個對象以“{”(左括弧)開始,“}”(右括弧)結束。每一個“名稱”後跟一個“:”(冒號);“‘名稱/值’ 對”之間使用“,”(逗號)分隔。

數組(array) 是值(value)的有序集合。一個數組以“[”(左中括弧)開始,“]”(右中括弧)結束。

值之間使用“,”(逗號)分隔。

值(value) 能夠是雙引號括起來的字串(string)、數值(number)、true、false、 null、對象(object)或者數組(array)。這些結構能夠嵌套。



字串(string) 是由雙引號包圍的隨意數量Unicode字元的集合,使用反斜線轉義。

一個字元(character)即一個單獨的字串(character string)。
JSON的字串(string)與C或者Java的字串非常類似。



數值(number) 也與C或者Java的數值非常類似。

僅僅是JSON的數值沒有使用八進位與十六進位格式。



同一時候,能夠在隨意標記之間加入空白。

2.Java中的Json

2.1.json原始碼

原始碼:https://github.com/stleary/JSON-java



2.2.JsonLib的使用
Json-lib :http://json-lib.sourceforge.net/
所須要的jar包括下面:
commons-beanutils-1.8.3.jar
commons-collections-3.2.1.jar
commons-lang-2.6.jar
commons-logging-1.1.1.jar
ezmorph-1.0.6.jar
json-lib-2.4-jdk15.jar
2.3.Org.json
:https://search.maven.org/#search|gav|1|g%3A%22org.json%22%20AND%20a%3A%22json%22

3.JavaScript中的json

JSON 是JavaScript物件常值符號的一個子集. 由於JSON是JavaScript的一個子集, 它能夠自如的在JavaScript中使用.

var myJSONObject = { "bindings": [ {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},{"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},{"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"} ] }; 

在這個範例中, 建立了僅僅包括一個成員 bindings 的對象, 而這個對象又包括了一個擁有三個對象的數組, 當中每一個數組對象包括了 ircEvent, method, regex 三個成員.
成員能夠用 點(.) 或者 下標([]) 操作符來引用.

 myJSONObject.bindings[0].method // "newURI"

要將 JSON 字串轉換成一個對象, 我們能夠用 eval() 函數. eval() 會觸發JavaScript的編譯器. 由於JSON是JavaScript的一個真子集, 編譯器會正確的解析字串內容, 同一時候產生一個對象結構. 字串必須用括弧括起來, 以免產生JavaScript文法歧義.

var myObject = eval(‘(‘ + myJSONtext + ‘)‘);

eval 函數速度非常快. 它能夠編譯和運行不論什麼JavaScript代碼, 這裡可能存在安全問題. 當源是可信的並且完整的時候, 能夠使用 eval. 而用JSON解析器是更安全的方式. 在使用XMLHttpRequest的Web程式中, 僅僅同意在同源的情況下通訊, 因此它是可信的. 但它不一定是完整的. 假設server用的不是嚴謹的JSON編碼, 或者它沒有嚴格檢查全部輸入內容, 它也能夠提供無效的JSON, 同一時候帶上危急的指令碼. 此時, eval 將會運行該指令碼, 產生危害.
為瞭解決問題, 應該使用JSON解析器. JSON解析器僅僅會識別JSON文本, 拒絕全部指令碼. 在提供原生JSON支援的瀏覽器中, JSON解析器比 eval 更快. 原生的JSON支援非常有可能包括在ECMAScript下一個版本號碼的標準中.

var myObject = JSON.parse(myJSONtext, reviver);

可選的reviver參數是一個函數, 在每一個鍵/值在每一級的終於結果後都會被調用. 每一個值將會被替換為reviver函數的返回結果. 它能夠用來將對象組織成偽類(pseudoclasses)的一個執行個體, 或者將date字串轉換成Date對象

myData = JSON.parse(text, function (key, value) { var type;if (value && typeof value === ‘object‘) { type = value.type;if (typeof type === ‘string‘ && typeof window[type] === ‘function‘) { return new (window[type])(value); } }return value; }); 

JSON字串化是一個反過來的動作, 它將JavaScript的資料結構轉化成JSON字串. JSON不支援迴圈的資料結構, 因此在用JSON字串化的時候, 不要給它循環參考的結構.

var myJSONText = JSON.stringify(myObject, replacer);

假設 stringify 方法發現對象包括了一個 toJSON 的方法, 它會調用這種方法, 然後將返回的結果字串化. 這同意對象自訂它們的JSON表示方式.
字串化方法能夠帶一個可選的字串數組. 這些字串能夠用來選擇哪些屬性將會被包括在產生的JSON文本中.
字串化方法還能夠使用一個可選的 replacer 函數, 這個函數將會在結構中的每一個值的 toJSON 方法(假設存在的話) 後調用. 它將接收每一個key和value作為它的參數. 這會被綁定在包括key的對象中. 它返回的值會被字串化.
沒有JSON表示的值(比方函數和undefined)將會被排除.
無限大的數字將會被替換為NULL, 要替換其它值, 你能夠用類似的 replacer 函數:

function replacer(key, value) { if (typeof value === ‘number‘ && !isFinite(value)) { return String(value); }return value; } 

提供一個合適的 reviver 函數給 JSON.parse 就能夠實現.

4.Json與XML

可延伸標記語言 (XML)(XML)是一種來自標準通用標記語言 (SGML)(SGML)的文字格式設定. 與SGML相比, XML更簡單. 超文字標記語言 (HTML)(HTML), 經過對照, 顯得更為簡單. 雖然如此, 一本好的HTML參考書有一英寸厚. 這是由於文檔的格式化和結構化是一件複雜的事情.
大部分XML的優勢是環繞它作為可互動資料序列格式的角色. 作為資料表示語言, XML有著兩個巨大的優勢:
- 它是基於文本的.
- 它是位置無關的.
全部這些使得她相比其它資料交換格式在更高層次上獨立於應用程式. 其實, XML已經是W3C的標準, 這意味著已經無需再去爭論(或者看起來如此).
遺憾的是, XML不能非常好的適用於資料交換, 就好像扳手並非用來DingTalk子的. 它包括了太多的封裝, 並且它跟大多數程式設計語言的資料模型不匹配. 大部分程式猿在第一眼見到XML的時候, 他們都被XML的醜陋和低效所震驚了. 事實證明, 第一反應WangWang是正確的. 還有還有一種蚊子符號, 她不但有XML的全部長處, 並且她更適合於資料交換. 這個符號就是JavaScript對象符號(JSON).
關於XML的最明智的見解(比如: xmlsuck.org)指出XML在作為資料互動格式上存在非常大的問題. 但這一不足被它所帶來的互通性和開放性所彌補.
JSON擁有相同的互通性和開放性, 並且沒有其它不足.
讓我們在覺得重要的屬性上來比較XML和JSON.
1)簡單

XML比SGML更簡單, 但JSON比XML還要簡單. JSON擁有更簡單的文法, 並且直接相應到現代語言的資料結構. 

2)可擴充性
JSON是不可擴充的, 由於她不須要被擴充. JSON不是一個文檔標記語言, 因此沒有不論什麼必要去定義新的標籤或者屬性來表示內部資料.
3)互通性
JSON擁有XML一樣的互通性能.
4)開放性
JSON至少與XML一樣開放, 或許更開放. 由於她不在社團/政治標準化鬥爭的中心.
5)XML是可供人類閱讀的
相比XML, JSON更加easy閱讀. 她也更easy書寫.同一時候, 也更easy被機器讀取和寫入.
6)XML能夠用來作為資料交換格式, 使得使用者能夠將他們的資料在類似的程式之間相互移動.
相同的, JSON也如此.
7)XML提供了一種資料結構, 以包括很多其它的資訊.
相同的, JSON也如此.
8)XML非常easy處理, 由於資料的結構是簡單並且標準的.
JSON能夠更easy的處理, 由於她的結構更簡單.
9)有非常多可重用的軟體提供給程式猿來處理XML, 他們不須要重寫代碼.
JSON, 作為一個更簡單的符號, 須要更少的軟體. 在JavaScript和Python中, JSON符號是內建與程式語言的. 壓根不須要不論什麼多餘的軟體. 在其它語言中, 僅僅須要少量的JSON特定的代碼. 比方, JSON.org提供了一個僅僅包括三個類的包就能夠使得Java語言支援JSON.
10)XML將資料的表示和資料的結構分開
XML須要將資料結構轉換成文檔結構. 這個映射是複雜的. JSON結構是基於數組和記錄的. 那就是資料的組成. XML結構是基於元素(能夠嵌套), 屬性(不能嵌套), 原始蚊子, 實體, DTD和其它中繼資料結構.
11)一種通用的交換格式
JSON是一種更好的資料交換格式. XML是更好的文檔交換格式. 用正確的工具做正確事.
12)一個資料多中展示
JSON不提供不論什麼顯示能力由於她不是文檔標記語言.
13)自描寫敘述資料
XML和JSON在這一點上是一樣的.
14)全然整合全部傳統資料庫和格式
(關於XML的陳述有時有點誇張) XML文檔能夠包括不論什麼能夠想象的資料類型 - 從傳統資料, 如文本和數字、多媒體對象, 如聲音, 到活動格式, 如Java Applet 或者ActiveX 組件.
JSON沒有<[CDATA[]]>特性, 因此她不適合用來承載聲音或者映像或者其它大的二進位載荷. JSON為資料進行了最佳化. 此外, 在資料交換系統中提供可運行程式可能會引入危急的安全問題.
15)國際化
XML和JSON都用Unicode編碼.
16)開放性和可擴充性
XML有一個開放的結構同意你在須要的時候加入其它國家的藝術元素. 這意味著你能夠隨時調整你的系統來接受特定行業的詞彙.
這些詞彙能夠自己主動轉換為JSON, 從XML遷移到JSON是非常簡單的.
17)XML對於人類和機器閱讀起來都非常easy.
JSON比XML更easy讓人和機器閱讀.
18)XML是物件導向的
其實, XML是面向文檔的. JSON是面向資料的. JSON能夠更easy的映射到物件導向的系統.
19)XML被電腦行業廣泛的使用
JSON剛剛被大家所知. 她的簡潔以及從非常easy從XML轉換到JSON的特性使得JSON會更加被廣泛的使用.

Json學習一(基礎概念知識學習)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.