亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JSON數(shù)據(jù)格式及其在WEB開(kāi)發(fā)中的應(yīng)用

red_bricks / 1695人閱讀

摘要:是什么是一種輕量級(jí)的數(shù)據(jù)交換格式,采用完全獨(dú)立于語(yǔ)言的文本格式,是理想的數(shù)據(jù)交換格式。同時(shí),是原生格式,這意味著在中處理數(shù)據(jù)不需要任何特殊的或工具包。底層存儲(chǔ)為格式是個(gè)構(gòu)建在之上的新型查詢語(yǔ)言。

JSON是什么?

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...

JSON的歷史

在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官方網(wǎng)站:http://json.org/

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

json與ajax

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

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與xml互相轉(zhuǎn)換

JSON的格式必須是數(shù)組或者對(duì)象,其屬性支持一下類型:

boolean: true, false

number: 0, 1, 2, 3

string: "abc"

object: null, {}, {"a": "b"}

array: [], [1, 2]

嚴(yán)格的語(yǔ)法約束

不能有ascii之外的字符,漢字應(yīng)使用"u6c49"格式;

然而在utf-8流行的時(shí)代,漢字不編碼已不是啥大問(wèn)題了;

不能有注釋,行注釋與塊注釋都不可以;

字符串中不能有TAB,使用"t"表示;

對(duì)象中的所有的key都必須添加雙引號(hào),所有的字符串類型的value也都必須是雙引號(hào)格式的;

json與js

因?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, " "*/);

eval解析json問(wèn)題:
var str = "{"name":"value"}";
// 方法1
var json = eval("(" + str + ")");   // 存在諸如 XSS 攻擊風(fēng)險(xiǎn)
// 方法2
var json;
eval("json = " + str);
JSON在其他語(yǔ)言中的序列化問(wèn)題

這里不說(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與其他語(yǔ)言之間的類型對(duì)應(yīng)關(guān)系
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
數(shù)據(jù)類型問(wèn)題為何如此重要?

弱類型語(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é)議,類型不是它們特有的

嚴(yán)格來(lái)說(shuō),JSON不是JavaScript的子集;

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);

JSON的高階應(yīng)用

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

相關(guān)文章

  • Jsonp及其實(shí)現(xiàn)原理

    摘要:同源策略,它是由提出的一個(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...

    TesterHome 評(píng)論0 收藏0
  • 前端開(kāi)發(fā)者手冊(cè)2019

    摘要:年,和前端開(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 ...

    church 評(píng)論0 收藏0
  • 前端開(kāi)發(fā)者手冊(cè)2019

    摘要:年,和前端開(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 ...

    xiao7cn 評(píng)論0 收藏0
  • 前端開(kāi)發(fā)者手冊(cè)2019

    摘要:年,和前端開(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 ...

    鄒立鵬 評(píng)論0 收藏0
  • JavaScript 進(jìn)階知識(shí) - Ajax篇

    摘要:注意事項(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í)和一些...

    Dongjie_Liu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<