摘要:是什么是一種輕量級的數據交換格式,采用完全獨立于語言的文本格式,是理想的數據交換格式。同時,是原生格式,這意味著在中處理數據不需要任何特殊的或工具包。底層存儲為格式是個構建在之上的新型查詢語言。
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式,采用完全獨立于語言的文本格式,是理想的數據交換格式。同時,JSON是 JavaScript 原生格式,這意味著在 JavaScript 中處理 JSON數據不需要任何特殊的 API 或工具包。
RFC: http://www.rfc-editor.org/rfc...
在2001年,JSON被道格拉斯?克羅克福德(Douglas Crockford)創建,并在RFC4627與IETF(因特網工程任務組)標準中被規定;詳情見 http://tools.ietf.org/html/rf...。根據規范,JSON的IANA(互聯網數字分配機構)媒體類型是application/json,文件類型是json。
它基于JavaScript語言,是在JavaScript的數組(array)和對象(object)基礎上發展而來;
道格拉斯從JS語言中發現的(也可以說是他創造出來的),比當時流行的XML數據傳輸要優越;
JSON是語言無關的,支持語言如下
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),是指一種創建交互式網頁應用的網頁開發技術;
雖然 Ajax 先出來了,但是目前前后端的ajax通訊幾乎都是json格式的了。
JSON 和 XML的對比
可讀性: JSON和XML的可讀性可謂不相上下,一邊是建議的語法,一邊是規范的標簽形式,很難分出勝負。
可擴展性: XML天生有很好的擴展性,JSON當然也有,沒有什么是XML能擴展,JSON不能的。
編碼難度: XML有豐富的編碼工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的編碼明顯比XML容易許多,即使不借助工具也能寫出JSON的代碼,可是要寫好XML就不太容易了。其實手工拼json其實也是個有挑戰的活兒
解碼難度: XML的解析得考慮子節點父節點,讓人頭昏眼花,而JSON的解析難度幾乎為0。這一點XML輸的真是沒話說。
流行度: XML已經被業界廣泛的使用,而JSON才剛剛開始,但是在Ajax這個特定的領域,未來的發展一定是XML讓位于JSON。
JSON的格式必須是數組或者對象,其屬性支持一下類型:
boolean: true, false
number: 0, 1, 2, 3
string: "abc"
object: null, {}, {"a": "b"}
array: [], [1, 2]
不能有ascii之外的字符,漢字應使用"u6c49"格式;
然而在utf-8流行的時代,漢字不編碼已不是啥大問題了;
不能有注釋,行注釋與塊注釋都不可以;
字符串中不能有TAB,使用"t"表示;
對象中的所有的key都必須添加雙引號,所有的字符串類型的value也都必須是雙引號格式的;
因為JSON源于JS,所以JSON在JS中具有得天獨厚的優勢;
因為JS是web環境下B端開發語言的不二之選,所以JSON在WEB中大行其道;
優勢:
JS的語法子集,合法的JSON代碼在JS中也是合法的JS代碼,內嵌JSON傳輸隨處可見,jsonp的原理便是基于此前提的;
解析JSON數據的成本足夠小,eval,json.js, JSON.parse(str)
各種封裝庫直接透傳json格式,導致json誕生之后迅速取代xml在數據傳輸中的地位;
JSON序列化在JS中也非常容易,json.js,JSON.stringify(json/*, null, " "*/);
var str = "{"name":"value"}"; // 方法1 var json = eval("(" + str + ")"); // 存在諸如 XSS 攻擊風險 // 方法2 var json; eval("json = " + str);
這里不說解析(反序列化),只要是"合法的"JSON數據,解析庫使用的正確,并且二者相匹配,不應該有問題;
關于格式化問題:格式化是為了方便調試,生產環境中,應避免使用;
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 |
弱類型語言不代表沒有類型
最新的JS引擎(V8等),約束類型有利于性能
讓數據傳輸協議無歧義,簡化約定
讓兩端的代碼處理邏輯簡化,避免各種異常的問題
嚴格遵守類型約定,可以規避很多容易被忽視的問題
想一想各種二進制的數據傳輸協議,類型不是它們特有的
JSON: 不要誤會,我真的不是JavaScript的子集
"u2028",LINE SEPARATOR,下面的字符被認為是行終止符:
* `u000A` - Line Feed * `u000D` - Carriage Return * `u2028` - Line Separator * `u2029` - Paragraph separator
正因為這兩個不可見的Unicode字符,JSON便不是JavaScript的一個子集了,就差了這么一點點;
JSONP(JSON with Padding)是JSON的一種“使用模式”,可用于解決主流瀏覽器的跨域數據訪問的問題。
MongoDB底層存儲為JSON格式;
JSONiq是個構建在XQuery之上的新型查詢語言。類似于SQL或是LINQ,它提供了諸如let、for、where、group by與select等語法支持概念;
JSONSelect http://jsonselect.org JSONSelect是一個實驗性的JSON選擇語言, 她很容易從復雜的JSON文檔中訪問數據, 看上去就跟CSS一樣.
JSONiq http://www.jsoniq.org JSONiq是一個小型而簡潔的XQuery語言擴展來提供JSON支持
JsonML http://www.jsonml.org JsonML(JSON標記語言)是應用程序的JSON格式. 它使用基本的JSON數據格式機制并將其應用于XML的表示.
JSON-RPC http://json-rpc.org JSON-RPC是類似于XML-RPC的輕量級遠程過程調用(Remote Procedure Call), 它是為簡潔而生的.
JSONLint http://jsonlint.com JSONLint是一個JSON驗證器和格式化工具.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/97591.html
摘要:同源策略,它是由提出的一個著名的安全策略,現在所有支持的瀏覽器都會使用這個策略。客戶端在對文件調用成功之后,也就獲得了自己所需的數據,剩下的就是按照自己需求進行處理和展現了,這種獲取遠程數據的方式看起來非常像,但其實并不一樣。 參考資料 一、先說說JSON 首先JSON是一種基于文本的數據交換方式,或者叫做數據描述格式。 JSON的優點: 基于純文本,跨平臺傳遞極其簡單; Javas...
摘要:年,和前端開發者與應用程序前端開發者之間產生了巨大的分歧。開發最常見的解決方案有手機和平板的原生應用程序桌面應用程序桌面應用程序原生技術最后,前端開發者可以從瀏覽器開發中學習到,編寫代碼不需要考慮瀏覽器引擎的限制。 前端開發者手冊2019 Cody Lindley 編著 原文地址 本手冊由Frontend Masters贊助,通過深入現代化的前端工程課程來提高你的技能。 下載:PDF ...
摘要:年,和前端開發者與應用程序前端開發者之間產生了巨大的分歧。開發最常見的解決方案有手機和平板的原生應用程序桌面應用程序桌面應用程序原生技術最后,前端開發者可以從瀏覽器開發中學習到,編寫代碼不需要考慮瀏覽器引擎的限制。 前端開發者手冊2019 Cody Lindley 編著 原文地址 本手冊由Frontend Masters贊助,通過深入現代化的前端工程課程來提高你的技能。 下載:PDF ...
摘要:年,和前端開發者與應用程序前端開發者之間產生了巨大的分歧。開發最常見的解決方案有手機和平板的原生應用程序桌面應用程序桌面應用程序原生技術最后,前端開發者可以從瀏覽器開發中學習到,編寫代碼不需要考慮瀏覽器引擎的限制。 前端開發者手冊2019 Cody Lindley 編著 原文地址 本手冊由Frontend Masters贊助,通過深入現代化的前端工程課程來提高你的技能。 下載:PDF ...
摘要:注意事項以下版本要設置默認編碼,,否則程序可能無法正確顯示中文。組成部分協議是對請求和響應的報文內容進行了約束和規范。請求報文請求是由客戶端發起,其規范格式為請求行請求頭請求主體。 showImg(https://segmentfault.com/img/remote/1460000013696283?w=1920&h=1080); Ajax 前言 前面我們已經學習了js基礎知識和一些...
閱讀 3478·2023-04-26 02:00
閱讀 3078·2021-11-22 13:54
閱讀 1699·2021-08-03 14:03
閱讀 709·2019-08-30 15:52
閱讀 3085·2019-08-29 12:30
閱讀 2420·2019-08-26 13:35
閱讀 3364·2019-08-26 13:25
閱讀 3001·2019-08-26 11:39