JSON必知必會

什么是JSON

  • JSON是一種數(shù)據(jù)交換格式
  • JSON獨(dú)立于編程語言,雖然是JS的子集
  • JSON基于JS對象字面量表示法
  • JSON表達(dá)數(shù)據(jù)的方式對通用的編程概念友好(可移植性)

PS:
表示法:一個用于表示數(shù)據(jù)的字符系統(tǒng)
數(shù)據(jù)交換格式:用于不同平臺或系統(tǒng)間交換數(shù)據(jù)的文本
可移植性:不同系統(tǒng)平臺間兼容性好


JSON語法

  • JSON基于JS對象字面量中表示屬性的語法,但不包含JS對象中的方法
  • JSON的名稱-值對中,名稱始終被雙引號包裹(""),值可以是字符串,數(shù)字,布爾值,null,對象或數(shù)組
  • 名稱-值對列表被花括號包裹({})
  • 多個名稱-值對間用逗號(,)隔開
  • 文件擴(kuò)展名為.json
  • 媒體類型為application/json

舉個栗子

{
"age":20,
"name":"tao",
"sex":"man"
}

字面量:是對數(shù)據(jù)值的具體表示
變量:通過標(biāo)識符來表示的,可修改的值
x = x + 5其中5就是一個數(shù)字字面量


JSON的數(shù)據(jù)類型

  • JSON的布爾類型的值只有true和false,必須小寫
  • JSON的null值也必須小寫
  • 數(shù)據(jù)類型的對象和數(shù)組的一個關(guān)鍵區(qū)別是,對象是名稱-值對構(gòu)成的列表或集合,數(shù)據(jù)是值構(gòu)成的列表和集合
  • 對象和數(shù)組另一個區(qū)別是,數(shù)組中的值應(yīng)具有相同的數(shù)據(jù)類型(因為在JS里數(shù)組存入的數(shù)據(jù)類型可以不一樣,但是使用JSON作為數(shù)據(jù)傳輸?shù)挠植恢皇荍S,而大多數(shù)編程語言都不支持?jǐn)?shù)組中的元素數(shù)據(jù)類型不一樣)
    舉個栗子
{
    "boy":{
            "name":"tao",
            "age":20
    },
   "arr":[
            1,
            2
    ]
}

ps:
JSON的字符串類型,使用("")雙引號包裹(因為一般編程語言的string類型都是雙引號包裹的)
布爾類型:true 或 false
數(shù)字類型:46 可以是整數(shù),小數(shù),或指數(shù)
null類型:null 代表一個空值
數(shù)組類型:用方括號包裹[]
對象類型:用花括號包裹{}


JSON Schema

數(shù)據(jù)交換中的一種虛擬"合同"

  • JSON Schema 負(fù)責(zé)的是提供一致性的檢驗,是數(shù)據(jù)接收方的第一道防線,可以節(jié)省時間和保證數(shù)據(jù)正確,像是一個過濾器。
  • JSON Schema可以解決如下問題
  • 值的數(shù)據(jù)類型是否正確,規(guī)則值的數(shù)據(jù)類型
  • 是否是我要的數(shù)據(jù),具體規(guī)定哪些是我要的,哪些是我不要的
  • 可以規(guī)定值的范圍,最大值和最小值

JSON中的安全問題

  • 服務(wù)端:提供服務(wù)的一端,例如 Web服務(wù)器
  • 客戶端:請求服務(wù)的一端,例如 Web瀏覽器
  • 跨站請求偽造(CSRF)
    指利用站點(diǎn)對用戶瀏覽器的信任進(jìn)行的攻擊,比如GET請求中直接暴露在外的用戶信息
  • 頂層JSON數(shù)組
    存于JSON名稱-值對之外的位于文檔最頂層的JSON數(shù)組,雖然在JS中允許,但不規(guī)范,也存在安全問題,不推薦使用
  • 注入攻擊
    利用某些bug注入惡意代碼進(jìn)行攻擊
  • JSON跨站腳本攻擊
    通過截取或?qū)⒄军c(diǎn)中所使用的第三方代碼更換為惡意腳本,進(jìn)行注入攻擊
  • 關(guān)于JSON安全問題要注意以下幾項
  1. 不要使用頂級數(shù)組
  2. 盡量使用POST請求
  3. 使用JSON.parse()代替eval()方法,因為eval()方法容易被注入惡意代碼

JavaScript中的XMLHttpRequest與Web API

  • Web API
    通過HTTP與服務(wù)進(jìn)行交互的一系列指令與標(biāo)準(zhǔn)
  • XMLHttpRequest
    一種JavaScript對象,無需刷新頁面即可從一個URL獲取數(shù)據(jù)(異步交互),常用與Ajax編程
  • 超文本傳輸協(xié)議 http
  • 序列化
    將對象轉(zhuǎn)化為文本的操作,JSON.stringify() JavaScript對象轉(zhuǎn)為JSON字符串
  • 反序列化
    將序列化的文本轉(zhuǎn)化為對象的操作,JSON.parse() JSON字符串轉(zhuǎn)為JavaScript對象
  • 同源策略
    出于安全考慮,瀏覽器僅會請求同一域的腳本
  • 跨域資源共享(CORS)
    通過設(shè)置響應(yīng)頭,使得跨域請求資源成功
  • JSON-P
    使用<script>標(biāo)簽,繞過同源策略的限制,實(shí)現(xiàn)不同域名的服務(wù)器上請求JSON
  • XMLHttpRequest與Web API是客戶端和服務(wù)端的關(guān)系
  • XMLHttpRequest并不只限于XML,還可以請求JSON資源

JSON與客戶端框架

  • 抽象化
    一種處理復(fù)雜系統(tǒng)的技術(shù),主要是把一個大問題分解為若干子問題
  • 框架
    一種可以節(jié)約時間,讓我們更專注于構(gòu)建功能的抽象化工具
  • 單頁Web應(yīng)用
    與傳統(tǒng)的多頁方式不同,著力于提供更加無縫的應(yīng)用體驗頁面
  • MVC
    數(shù)據(jù)模型,視圖,控制器
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容