摘要:是什么是一種輕量級(jí)的數(shù)據(jù)交換格式,采用完全獨(dú)立于語(yǔ)言的文本格式,是理想的數(shù)據(jù)交換格式。同時(shí),是原生格式,這意味著在中處理數(shù)據(jù)不需要任何特殊的或工具包。底層存儲(chǔ)為格式是個(gè)構(gòu)建在之上的新型查詢語(yǔ)言。
JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式,采用完全獨(dú)立于語(yǔ)言的文本格式,是理想的數(shù)據(jù)交換格式。同時(shí),JSON是 JavaScript 原生格式,這意味著在 JavaScript 中處理 JSON數(shù)據(jù)不需要任何特殊的 API 或工具包。
RFC: http://www.rfc-editor.org/rfc...
在2001年,JSON被道格拉斯?克羅克福德(Douglas Crockford)創(chuàng)建,并在RFC4627與IETF(因特網(wǎng)工程任務(wù)組)標(biāo)準(zhǔn)中被規(guī)定;詳情見(jiàn) http://tools.ietf.org/html/rf...。根據(jù)規(guī)范,JSON的IANA(互聯(lián)網(wǎng)數(shù)字分配機(jī)構(gòu))媒體類型是application/json,文件類型是json。
它基于JavaScript語(yǔ)言,是在JavaScript的數(shù)組(array)和對(duì)象(object)基礎(chǔ)上發(fā)展而來(lái);
道格拉斯從JS語(yǔ)言中發(fā)現(xiàn)的(也可以說(shuō)是他創(chuàng)造出來(lái)的),比當(dāng)時(shí)流行的XML數(shù)據(jù)傳輸要優(yōu)越;
JSON是語(yǔ)言無(wú)關(guān)的,支持語(yǔ)言如下
8th,ABAP,Ada,AdvPL,ASP,AWK,Bash,BlitzMax,C,C++,C#,Ciao,Clojure,Cobol,ColdFusion,
D,Dart,Delphi,E,Fantom,FileMaker,Fortran,Go,Groovy,Haskell,Java,JavaScript,LabVIEW,Lisp,LiveCode,LotusScript,LPC,Lua
M,Matlab,Net.Data,Nim,Objective C,OCaml,PascalScript,Perl,Photoshop,PHP,PicoLisp,Pike,PL/SQL,PowerShell,PureBasic,Puredata,Python,
R,Racket,Rebol,RPG,Rust,Ruby,Scheme,Squeak,Symbian,Tcl,Visual Basic,Visual FoxPro
Ajax 即“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),是指一種創(chuàng)建交互式網(wǎng)頁(yè)應(yīng)用的網(wǎng)頁(yè)開(kāi)發(fā)技術(shù);
雖然 Ajax 先出來(lái)了,但是目前前后端的ajax通訊幾乎都是json格式的了。
JSON 和 XML的對(duì)比
可讀性: JSON和XML的可讀性可謂不相上下,一邊是建議的語(yǔ)法,一邊是規(guī)范的標(biāo)簽形式,很難分出勝負(fù)。
可擴(kuò)展性: XML天生有很好的擴(kuò)展性,JSON當(dāng)然也有,沒(méi)有什么是XML能擴(kuò)展,JSON不能的。
編碼難度: XML有豐富的編碼工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的編碼明顯比XML容易許多,即使不借助工具也能寫出JSON的代碼,可是要寫好XML就不太容易了。其實(shí)手工拼json其實(shí)也是個(gè)有挑戰(zhàn)的活兒
解碼難度: XML的解析得考慮子節(jié)點(diǎn)父節(jié)點(diǎn),讓人頭昏眼花,而JSON的解析難度幾乎為0。這一點(diǎn)XML輸?shù)恼媸菦](méi)話說(shuō)。
流行度: XML已經(jīng)被業(yè)界廣泛的使用,而JSON才剛剛開(kāi)始,但是在Ajax這個(gè)特定的領(lǐng)域,未來(lái)的發(fā)展一定是XML讓位于JSON。
JSON的格式必須是數(shù)組或者對(duì)象,其屬性支持一下類型:
boolean: true, false
number: 0, 1, 2, 3
string: "abc"
object: null, {}, {"a": "b"}
array: [], [1, 2]
不能有ascii之外的字符,漢字應(yīng)使用"u6c49"格式;
然而在utf-8流行的時(shí)代,漢字不編碼已不是啥大問(wèn)題了;
不能有注釋,行注釋與塊注釋都不可以;
字符串中不能有TAB,使用"t"表示;
對(duì)象中的所有的key都必須添加雙引號(hào),所有的字符串類型的value也都必須是雙引號(hào)格式的;
因?yàn)镴SON源于JS,所以JSON在JS中具有得天獨(dú)厚的優(yōu)勢(shì);
因?yàn)镴S是web環(huán)境下B端開(kāi)發(fā)語(yǔ)言的不二之選,所以JSON在WEB中大行其道;
優(yōu)勢(shì):
JS的語(yǔ)法子集,合法的JSON代碼在JS中也是合法的JS代碼,內(nèi)嵌JSON傳輸隨處可見(jiàn),jsonp的原理便是基于此前提的;
解析JSON數(shù)據(jù)的成本足夠小,eval,json.js, JSON.parse(str)
各種封裝庫(kù)直接透?jìng)鱦son格式,導(dǎo)致json誕生之后迅速取代xml在數(shù)據(jù)傳輸中的地位;
JSON序列化在JS中也非常容易,json.js,JSON.stringify(json/*, null, " "*/);
var str = "{"name":"value"}"; // 方法1 var json = eval("(" + str + ")"); // 存在諸如 XSS 攻擊風(fēng)險(xiǎn) // 方法2 var json; eval("json = " + str);
這里不說(shuō)解析(反序列化),只要是"合法的"JSON數(shù)據(jù),解析庫(kù)使用的正確,并且二者相匹配,不應(yīng)該有問(wèn)題;
關(guān)于格式化問(wèn)題:格式化是為了方便調(diào)試,生產(chǎn)環(huán)境中,應(yīng)避免使用;
nodejs: 和瀏覽器中基本一致;
PHP: json_encode,json_decode(PHP 5 >= 5.2.0, PECL json >= 1.2.0)
Ruby: @json = @data.to_json, @data = JSON.parse(json)
Java:
JSON-java: JSONXXX.fromObject(str), obj.toString()
JSONObject jsonObj = JSONObject.fromObject(jsonString);
JSONArray jsonArr = JSONArray.fromObject(jsonString);
google-gson: gson.toJson, gson.fromJson
json | js | php | ruby | java |
---|---|---|---|---|
boolean | boolean | boolean | true,false | boolean |
number | number | integer, float | Integer, Float | int, float, double |
string | string | string | String | String |
array | Array | Array | Array | [] |
object | Object | Array | Hash | Object(from class) |
null | null | null | Nil | null |
弱類型語(yǔ)言不代表沒(méi)有類型
最新的JS引擎(V8等),約束類型有利于性能
讓數(shù)據(jù)傳輸協(xié)議無(wú)歧義,簡(jiǎn)化約定
讓兩端的代碼處理邏輯簡(jiǎn)化,避免各種異常的問(wèn)題
嚴(yán)格遵守類型約定,可以規(guī)避很多容易被忽視的問(wèn)題
想一想各種二進(jìn)制的數(shù)據(jù)傳輸協(xié)議,類型不是它們特有的
JSON: 不要誤會(huì),我真的不是JavaScript的子集
"u2028",LINE SEPARATOR,下面的字符被認(rèn)為是行終止符:
* `u000A` - Line Feed * `u000D` - Carriage Return * `u2028` - Line Separator * `u2029` - Paragraph separator
正因?yàn)檫@兩個(gè)不可見(jiàn)的Unicode字符,JSON便不是JavaScript的一個(gè)子集了,就差了這么一點(diǎn)點(diǎn);
JSONP(JSON with Padding)是JSON的一種“使用模式”,可用于解決主流瀏覽器的跨域數(shù)據(jù)訪問(wèn)的問(wèn)題。
MongoDB底層存儲(chǔ)為JSON格式;
JSONiq是個(gè)構(gòu)建在XQuery之上的新型查詢語(yǔ)言。類似于SQL或是LINQ,它提供了諸如let、for、where、group by與select等語(yǔ)法支持概念;
JSONSelect http://jsonselect.org JSONSelect是一個(gè)實(shí)驗(yàn)性的JSON選擇語(yǔ)言, 她很容易從復(fù)雜的JSON文檔中訪問(wèn)數(shù)據(jù), 看上去就跟CSS一樣.
JSONiq http://www.jsoniq.org JSONiq是一個(gè)小型而簡(jiǎn)潔的XQuery語(yǔ)言擴(kuò)展來(lái)提供JSON支持
JsonML http://www.jsonml.org JsonML(JSON標(biāo)記語(yǔ)言)是應(yīng)用程序的JSON格式. 它使用基本的JSON數(shù)據(jù)格式機(jī)制并將其應(yīng)用于XML的表示.
JSON-RPC http://json-rpc.org JSON-RPC是類似于XML-RPC的輕量級(jí)遠(yuǎn)程過(guò)程調(diào)用(Remote Procedure Call), 它是為簡(jiǎn)潔而生的.
JSONLint http://jsonlint.com JSONLint是一個(gè)JSON驗(yàn)證器和格式化工具.
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/97591.html
摘要:同源策略,它是由提出的一個(gè)著名的安全策略,現(xiàn)在所有支持的瀏覽器都會(huì)使用這個(gè)策略??蛻舳嗽趯?duì)文件調(diào)用成功之后,也就獲得了自己所需的數(shù)據(jù),剩下的就是按照自己需求進(jìn)行處理和展現(xiàn)了,這種獲取遠(yuǎn)程數(shù)據(jù)的方式看起來(lái)非常像,但其實(shí)并不一樣。 參考資料 一、先說(shuō)說(shuō)JSON 首先JSON是一種基于文本的數(shù)據(jù)交換方式,或者叫做數(shù)據(jù)描述格式。 JSON的優(yōu)點(diǎn): 基于純文本,跨平臺(tái)傳遞極其簡(jiǎn)單; Javas...
摘要:年,和前端開(kāi)發(fā)者與應(yīng)用程序前端開(kāi)發(fā)者之間產(chǎn)生了巨大的分歧。開(kāi)發(fā)最常見(jiàn)的解決方案有手機(jī)和平板的原生應(yīng)用程序桌面應(yīng)用程序桌面應(yīng)用程序原生技術(shù)最后,前端開(kāi)發(fā)者可以從瀏覽器開(kāi)發(fā)中學(xué)習(xí)到,編寫代碼不需要考慮瀏覽器引擎的限制。 前端開(kāi)發(fā)者手冊(cè)2019 Cody Lindley 編著 原文地址 本手冊(cè)由Frontend Masters贊助,通過(guò)深入現(xiàn)代化的前端工程課程來(lái)提高你的技能。 下載:PDF ...
摘要:年,和前端開(kāi)發(fā)者與應(yīng)用程序前端開(kāi)發(fā)者之間產(chǎn)生了巨大的分歧。開(kāi)發(fā)最常見(jiàn)的解決方案有手機(jī)和平板的原生應(yīng)用程序桌面應(yīng)用程序桌面應(yīng)用程序原生技術(shù)最后,前端開(kāi)發(fā)者可以從瀏覽器開(kāi)發(fā)中學(xué)習(xí)到,編寫代碼不需要考慮瀏覽器引擎的限制。 前端開(kāi)發(fā)者手冊(cè)2019 Cody Lindley 編著 原文地址 本手冊(cè)由Frontend Masters贊助,通過(guò)深入現(xiàn)代化的前端工程課程來(lái)提高你的技能。 下載:PDF ...
摘要:年,和前端開(kāi)發(fā)者與應(yīng)用程序前端開(kāi)發(fā)者之間產(chǎn)生了巨大的分歧。開(kāi)發(fā)最常見(jiàn)的解決方案有手機(jī)和平板的原生應(yīng)用程序桌面應(yīng)用程序桌面應(yīng)用程序原生技術(shù)最后,前端開(kāi)發(fā)者可以從瀏覽器開(kāi)發(fā)中學(xué)習(xí)到,編寫代碼不需要考慮瀏覽器引擎的限制。 前端開(kāi)發(fā)者手冊(cè)2019 Cody Lindley 編著 原文地址 本手冊(cè)由Frontend Masters贊助,通過(guò)深入現(xiàn)代化的前端工程課程來(lái)提高你的技能。 下載:PDF ...
摘要:注意事項(xiàng)以下版本要設(shè)置默認(rèn)編碼,,否則程序可能無(wú)法正確顯示中文。組成部分協(xié)議是對(duì)請(qǐng)求和響應(yīng)的報(bào)文內(nèi)容進(jìn)行了約束和規(guī)范。請(qǐng)求報(bào)文請(qǐng)求是由客戶端發(fā)起,其規(guī)范格式為請(qǐng)求行請(qǐng)求頭請(qǐng)求主體。 showImg(https://segmentfault.com/img/remote/1460000013696283?w=1920&h=1080); Ajax 前言 前面我們已經(jīng)學(xué)習(xí)了js基礎(chǔ)知識(shí)和一些...
閱讀 3790·2023-04-26 02:00
閱讀 3166·2021-11-22 13:54
閱讀 1773·2021-08-03 14:03
閱讀 764·2019-08-30 15:52
閱讀 3183·2019-08-29 12:30
閱讀 2474·2019-08-26 13:35
閱讀 3436·2019-08-26 13:25
閱讀 3052·2019-08-26 11:39