綜覽
JSON,javascript object notation是一種由道格拉斯·克羅克福特構(gòu)想設(shè)計(jì)歹垫,輕量級(jí)的數(shù)據(jù)交換
語言剥汤,以文字為基礎(chǔ),易于讓人閱讀排惨,
json是一個(gè)javascript的一個(gè)子集吭敢,但獨(dú)立于語言的文本格式,采用了類似c語言家族的一些習(xí)慣
產(chǎn)生時(shí)間:1999年
發(fā)展過程
JSON格式是1999年《JavaScript Programming Language, Standard ECMA-262 3rd Edition》的子集合 可以在javascript以eval()函數(shù)讀入(javascript通過eval()調(diào)用解釋器) 幾乎所有與網(wǎng)頁開發(fā)相關(guān)的語言都有JSON庫
存在格式
json用于描述數(shù)據(jù)結(jié)構(gòu)暮芭,有以下形式存在 (1) object,對(duì)象:一個(gè)對(duì)象以“{”開始鹿驼,并以“}”結(jié)束欲低。一個(gè)對(duì)象包含一系列非排序的名稱/值對(duì),每個(gè)名稱/值對(duì)之間使用“,”分區(qū)蠢沿。 (2) collection,名稱/值:名稱和值之間使用“:”隔開伸头,一般的形式是: {name:value},其中一個(gè)名稱是一個(gè)字符串匾效; 一個(gè)值可以是一個(gè)字符串舷蟀,一個(gè)數(shù)值,一個(gè)對(duì)象面哼,一個(gè)布爾值野宜,一個(gè)有序列表,或者一個(gè)null值魔策。 (3) 值的有序列表(Array):一個(gè)或者多個(gè)值用“,”分區(qū)后匈子,使用“[”,“]”括起來就形成了這樣的列表闯袒,形如: [collection, collection] (4) 字符串:以""括起來的一串字符虎敦。 (5) 數(shù)值:一系列0-9的數(shù)字組合,可以為負(fù)數(shù)或者小數(shù)政敢。還可以用“e”或者“E”表示為指數(shù)形式其徙。 (6) 布爾值:表示為true或者false。
運(yùn)用
WEB開發(fā) JSON最開始被廣泛的應(yīng)用于WEB應(yīng)用的開發(fā)喷户。不過目前JSON使用在JavaScript,Java,Node.js應(yīng)用的狀況比較多唾那,PHP,C#等開發(fā)的WEB應(yīng)用主要還是使用XML。 NoSQL數(shù)據(jù)庫 相對(duì)于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫褪尝,一些基于文檔存儲(chǔ)的NoSQL非關(guān)系型數(shù)據(jù)庫選擇JSON作為其數(shù)據(jù)存儲(chǔ)格式闹获,比較出名的產(chǎn)品有:MongoDB,CouchDB,RavenDB等。
安全性
讀取JSON
由于json是javascript的子集河哑,所以一般會(huì)使用eval()作為讀取數(shù)據(jù)的方式避诽,如果是針對(duì)可靠的數(shù)據(jù)來源,在不支持原生JSON解析的瀏覽器上面這是最快速的方法璃谨。然而由于eval方法同樣可以執(zhí)行任意的JavaScript代碼沙庐,因此當(dāng)數(shù)據(jù)來源不可靠時(shí)則可能產(chǎn)生安全性問題。 其中一種防止不安全代碼出現(xiàn)的解決辦法睬罗,是通過瀏覽器原生支持的JSON.parse(str)方法讀取JSON數(shù)據(jù)轨功,目前已經(jīng)得到大部分主流瀏覽器的支持(IE8+,F(xiàn)irefox 3.5+容达,Chrome4+/Safari4+古涧,Opera10+),在不支持原生JSON對(duì)象的瀏覽器上面可以使用parseJSON方法進(jìn)行讀取花盐,parseJSON 采用解析器驗(yàn)證讀入的代碼是否真的是JSON代碼羡滑,這樣就提供了較好的安全性菇爪。但由于這是用模擬的方式讀取,速度上會(huì)比eval()慢
跨站訪問問題
跨站請(qǐng)求偽造(Cross-site request forgery柒昏,簡稱CSRF或XSRF)凳宙。這個(gè)問題在Javascript中的狀況是,由于Javascript采用了稱為沙盒的機(jī)制职祷,這種機(jī)制限制Javascript引擎僅能引入同一個(gè)站點(diǎn)的代碼氏涩,因而某種程度上提高了安全性。
引用
維基百科