JSON 必知必會 觀后記
推薦大家購買紙質(zhì)書籍,當(dāng)然如果條件有限可以臨時下載電子版的:http://www.dbjr.com.cn/books/504703.html
術(shù)語
可移植性
平臺和系統(tǒng)間傳輸信息的兼容性。
JSON
JavaScriptObjectNotation 對象表示法。
數(shù)據(jù)交換格式
用于不同平臺或系統(tǒng)間交換數(shù)據(jù)的文本。
字面量
字面意思與其想表達(dá)的意思完全一致的值。
變量
通過形如X的標(biāo)識符來表示的,可以修改的一類值。
最大移植性
通過保證數(shù)據(jù)本身對于平臺和系統(tǒng)的兼容性來提供超越數(shù)據(jù)格式本身的可移植性。
名稱-值對
指擁有名稱和對應(yīng)值的屬性和特征(也叫鍵值對)。
語法驗證
json格式的驗證。
一致性驗證
關(guān)注獨(dú)特的數(shù)據(jù)結(jié)構(gòu)驗證。
JSON中的字符串類型
一個字符串值,如“你是個好人”,使用雙引號包裹。
概念
JSON是一種數(shù)據(jù)交換格式。
JSON獨(dú)立于編程語言。
JSON基于JavaScript對象的字面量表示法(重點(diǎn)在于表示法)。
JSON表達(dá)數(shù)據(jù)的方式對通用的編程概念都很友好。
JSON基于JavaScript對象字面量表示屬性的語法,但并不包含與JavaScript對象字面量的函數(shù)相關(guān)部分。
JSON的名稱-值對中,名稱始終被雙引號包裹。
JSON的名稱-值對中,值可以是字符串,數(shù)字,布爾值,null,對象式數(shù)組。
JSON中的名稱-值對列表始終被花括號包裹。
JSON中多個名稱值對使用逗號分隔。
JSON文件使用.json擴(kuò)展名。
JSON的媒體類型是application/json。
JSON中的布爾類型的值只有true和false,所有字母必須小寫。
JSON中的null值的所有字母必須小寫,表示空值。
JSON中的數(shù)字類型,一個數(shù)字值,如66,可以是正整數(shù),負(fù)整數(shù),小數(shù),指數(shù)。
對象和數(shù)組很關(guān)鍵的區(qū)別就是,對象是名稱-值對構(gòu)成的列表或集合,數(shù)組是值構(gòu)成的列表和集合。
對象和數(shù)組另一個關(guān)鍵區(qū)別是,數(shù)組中所有值應(yīng)具有相同的數(shù)據(jù)類型。
術(shù)語
JSON中的數(shù)組
數(shù)組是值的集合或列表,每個值都可以是字符串,數(shù)字,布爾值,對象或數(shù)組中的任何一種。數(shù)組必須被[]包裹,且值與值之間用逗號分隔。
JSON中的對象類型
對象類型是使用逗號分隔的名稱-值對構(gòu)成的集合,并使用{}包裹。
JSON Schema
數(shù)據(jù)交換中的一種虛擬合同。
服務(wù)端(web開發(fā)中的)
當(dāng)網(wǎng)頁式資源被請求時,在服務(wù)器上執(zhí)行的一系列操作。服務(wù)器為互聯(lián)網(wǎng)瀏覽器提供其處理和加載的響應(yīng)。
客戶端(web開發(fā)中的)
當(dāng)瀏覽器請求的界面加載完畢時執(zhí)行的一系列操作,通常是指HTML,CSS和JavaScript。
概念
JSON驗證器負(fù)責(zé)驗證語法錯誤,JSON Schema負(fù)責(zé)提供一致性驗證。
JSONSchema是負(fù)責(zé)數(shù)據(jù)接收第一道防線,也是數(shù)據(jù)發(fā)送方節(jié)約時間,保證數(shù)據(jù)正確的好工具。
JSONSchema可以解決下列一致性驗證的問題
1.值的數(shù)據(jù)類型是否正確? 可以具體規(guī)定一個值是數(shù)字、字符串等類型。
2.是否包含所需要的數(shù)據(jù)? 可以具體規(guī)定哪些數(shù)據(jù)是需要的,哪些不需要的。
3.值的形式是不是我需要的? 可以指定范圍,最小值最大值。
JSON本身不構(gòu)成什么威脅,它只是文本。
在定位JSON安全問題時,應(yīng)該記住以下3件事.
1.不要使用頂級數(shù)組,頂級數(shù)組是合法的JavaScript腳本,他們可以用<script>標(biāo)簽鏈接并使用。
2.對于不想公開的資源,僅允許使用HTTPPost方法請求,而不是Get方法,get方法可以通過url請求,甚至放在script標(biāo)簽中。
3.使用JSON.parser()來替代eval(),eval()函數(shù)會將傳入的字符串編譯并執(zhí)行,這會讓你的代碼易被攻擊,應(yīng)僅使用JSON.parser()來解析json數(shù)據(jù)。
安全漏洞通常由于開發(fā)人員沒有考慮“黑客如何利用這一點(diǎn)”這一問題所導(dǎo)致的。
JavaScript的XMLHTTPRequest與WEBAPI之間的關(guān)系是客戶端與服務(wù)端之間的關(guān)系。
XMLHTTPRequest并不僅限于XML,還可以用它來請求JSON資源
術(shù)語
跨站請求偽造(CSRF)
指利用站點(diǎn)對用戶瀏覽器的信任進(jìn)行攻擊
頂層JSON數(shù)組
存在于JSON名稱-值對之外的位于文檔最頂層的JSON數(shù)組。
注入攻擊
依賴于將數(shù)據(jù)注入到web應(yīng)用程序以方便惡意數(shù)據(jù)執(zhí)行或編譯的攻擊。
JSON跨站腳本攻擊
通過截取或?qū)⒄军c(diǎn)中所使用的第三方代碼更換為惡意腳本,來對站點(diǎn)進(jìn)行的一種注入攻擊。
webApi
通過Http與服務(wù)進(jìn)行交互的一系列指令與標(biāo)準(zhǔn)。
XMLHTTPRequest
一種JavaScript對象,無需刷新頁面即可從一個URL獲取數(shù)據(jù),常用與AJAX編程。
超文本傳輸協(xié)議(HTTP)
萬維網(wǎng)使用的交換數(shù)據(jù)的基本協(xié)議
序列化
將對象轉(zhuǎn)化為文本的操作
反序列化
將文本轉(zhuǎn)化為對象的操作。
概念
網(wǎng)站為人服務(wù),webAPI為代碼服務(wù),他們都使用Http協(xié)議。
同源策略使得JavaScript和JSON資源進(jìn)行客戶端-服務(wù)端交流時出現(xiàn)了一些困難。
客戶端跨域的XMLHTTPRequest需要服務(wù)端的支持來保證JSON資源請求成功。
jQuery是一款提供了JSON請求和解析功能的能夠縮短開發(fā)時間的抽象化工具,同時它還解決了跨瀏覽器兼容問題。
AngularJS MVC的概念
JSON是模型||數(shù)據(jù)模型
HTML是視圖,且提供了與模型進(jìn)行綁定的語法
控制器是AngularJS語法來定義和操作與模型和視圖間的交互的JavaScript文件。
AngularJS使得JavaScript對象和JSON在MVC架構(gòu)中大放異彩。
在關(guān)系型數(shù)據(jù)庫中,常常會存在表列行以及他們之間的關(guān)系,其中會用到主鍵和外鍵。
NoSQL數(shù)據(jù)庫有許多種,它們有與傳統(tǒng)的關(guān)系型模型不同的數(shù)據(jù)存儲與利用方法。
CouchDB數(shù)據(jù)庫重要概念
1.它是一種面向文檔的NoSQL數(shù)據(jù)庫
2.它存儲和管理JSON文檔
3.它會在存儲和獲取數(shù)據(jù)的同時維護(hù)好數(shù)據(jù)結(jié)構(gòu)
4.它會使用基于HTTP的API來獲取作為JSON文檔資源的數(shù)據(jù)
5.它使用JavaScript作為查詢語言,且通過視圖的map和reduce方法來跨API獲取數(shù)據(jù)。
在服務(wù)端,可以將JSON反序列化為對象而運(yùn)用在編程邏輯中,也可以將對象序列化成JSON格式。
JSON同時被服務(wù)端和客戶端較好的支持,使得它在web領(lǐng)域從諸多交換數(shù)據(jù)格式中脫穎而出。
術(shù)語
同源策略
出于安全考慮,瀏覽器僅會請求同一域的腳本。
跨域資源共享CORS
通過設(shè)置響應(yīng)頭,使得跨于請求可以成功。
JSON-p
使用script標(biāo)簽,繞過同源策略限制,從不同域名的服務(wù)器請求JSON。
抽象化
一種處理復(fù)雜系統(tǒng)的技術(shù),主要思想是將一個大問題轉(zhuǎn)換為多個小問題
框架
一種能夠節(jié)約時間,已讓我們更專注于構(gòu)建功能的抽象化工具。
Jquery.parserJSON()
一個jquery的函數(shù),它不僅調(diào)用JSON.parser()函數(shù),還會兼容那些不支持JSON.parser()函數(shù)的老式瀏覽器,且通過驗證字符來評估字符串,從而避免了可能的安全問題。
jquery.getJSON()
jquery.ajax()函數(shù)的簡寫形式,其中包含了將json解析為JavaScript對象的功能。
單頁web應(yīng)用
與傳統(tǒng)的多頁方式不同,著力于提供更加無縫的應(yīng)用體驗的網(wǎng)頁。
模型-視圖-控制器(MVC)
一種應(yīng)用架構(gòu)模式,它將應(yīng)用分為3部分:模型(數(shù)據(jù))、視圖(展示)、以及控制器(更新模型和視圖)
AngularJS
一款使用JavaScript對象作為數(shù)據(jù)模型的JavaScriptMVC框架。
關(guān)系型數(shù)據(jù)庫
一種將存儲的數(shù)據(jù)用可以辨識的關(guān)系進(jìn)行結(jié)構(gòu)化存儲的數(shù)據(jù)庫。
NoSQL數(shù)據(jù)庫
一種不通過存儲數(shù)據(jù)間關(guān)系來存儲的數(shù)據(jù)庫。
CouchDB
一種面向文檔的NoSQL數(shù)據(jù)庫存儲類型,使用JSON文檔的形式來存儲數(shù)據(jù)。
ASP.NET
微軟開發(fā)的服務(wù)端Web框架
PHP
用于創(chuàng)建動態(tài)web頁面的服務(wù)端腳本語言
Ruby on Rails
使用Ruby編寫的服務(wù)端Web應(yīng)用框架
Node.js
基于谷歌V8引擎的服務(wù)端JavaScript。
java
一種面向?qū)ο缶幊陶Z言。
JSON還會作為靜止的配置文件
在考慮用什么數(shù)據(jù)格式時,數(shù)據(jù)的形式和交換數(shù)據(jù)的系統(tǒng)都應(yīng)該被考慮到。?。?!JSON不總是最佳選擇。
相關(guān)文章
比較詳細(xì)的關(guān)于javascript 解析json的代碼
JSON (JavaScript Object Notation)一種簡單的數(shù)據(jù)格式,比xml更輕巧。 JSON 是 JavaScript 原生格式,這意味著在 JavaScript 中處理 JSON 數(shù)據(jù)不需要任何特殊的 API 或工具包。2009-12-12