JSON(JSON)是一種緊湊的數據格式,采用易于閱讀的文本形式,用于應用程序之間的數據交換。 JSON 獨立于編程語言。 所有主要語言都存在解析器和生成器。
JSON 最初由 Douglas Crockford 于 1997 年指定。 它目前(截至 2017 年底)由兩個具有相同內容的標準——RFC 8259 和 ECMA-404 指定。
應用領域
編輯JSON 用于傳輸和存儲結構化數據。 它用作數據傳輸(序列化)的數據格式。 特別是在 Web 應用程序和移動應用程序中,它經常與 JavaScript、Ajax 或 WebSockets 結合使用,在客戶端和服務器之間傳輸數據。
數據結構和格式定義
編輯字符編碼和數據類型
數據可以根據需要嵌套,例如對象的索引列表(“數組”)是可能的,它又包含數組或對象。 默認情況下,JSON 使用 UTF-8 作為字符編碼。 UTF-16 和 UTF-32 也是可能的。
JSON 知道以下類型的元素。
空值由關鍵字 null 表示,布爾值由關鍵字 true 和 false 表示。 這些不是字符串。 因此,與零一樣,它們不放在引號中。Number 是數字 0-9 的序列。 該序列可以由負號和小數點引入。 被打斷。 可以通過指定指數 e 或 E 后跟可選符號 + 或 - 以及數字序列 0–9 來補充數字。字符串以雙直引號 (") 開頭和結尾。它可以包含 Unicode 字符,并且可以是用 分隔包含初始轉義序列。數組以 . 開頭。它包含相同或不同類型的逗號分隔的索引列表元素。允許使用空數組。對象
以 { 開頭,以 } 結尾。 它包含一個以逗號分隔、無序列表的屬性。 允許沒有屬性的對象(“空對象”)。
由一個鍵和一個用冒號分隔的值組成(鍵:值)。 鍵應該是唯一的,因為不同的解析器會以不同的方式處理多次出現的鍵。 雖然 ECMA-404 不要求唯一性,但 RFC 7159 要求鍵在對象內是唯一的。
- 鍵是一個字符串。
- 值為任意元素。
允許使用無意義的空白字符,即空格 (Unicode U+0020)、水平制表符 (U+0009)、使用 LF 和/或 CR 的換行符(U+000D 和 U+000A)。 在解釋過程中,這些字符在字符串之外被忽略。
限制
JSON 不支持 JavaScript 支持的所有數據類型。 不支持的數據類型序列化如下:
JSON 模式
編輯JSON Schema 指定了一種基于 JSON 的格式來定義用于驗證、文檔和交互控制的 JSON 數據的結構。 它包含特定應用程序所需的 JSON 數據的合同以及如何修改該數據。
JSON Schema 基于 XML Schema 的概念,但它是基于 JSON 的。 與在 XSD 中一樣,相同的序列化器和反序列化器可用于架構和數據。 它是自我描述的,由 Internet 工程任務組在 Internet 草案中列出。 有多個驗證器可用于不同的編程語言,每個驗證器具有不同的一致性級別。
與XML的比較
編輯JSON 和 XML 都描述了記錄的結構。 數據集可以包含其他數據集,這意味著結構可以嵌套到任意深度。
在 XML 中,數據結構的各個節點被命名,而在 JSON 中,節點未命名。
在XML中,簡單的字符串既可以被描述為一個元素的屬性,也可以被描述為一個獨立的元素;JSON中沒有這種區別。 這種在大多數情況下無關緊要的靈活性意味著 XML 文檔的結構通常會出現不必要的差異。
JSON 和 XML 都有描述語言來進一步細化“有效”文檔的外觀,而不是“格式良好”的文檔。
JSON 的語法要簡單得多,因此通常看起來更具可讀性,尤其是更易于編寫。 通常,與 XML 相比,JSON 產生的開銷也更少。
JSON 和 XML 都必須由特殊的解析器讀取。 傳統上,任何格式良好的 JSON 文檔都是有效的 JavaScript 表達式,但不小心使用 eval() 解釋 JSON 文檔會引入安全漏洞。
JSON 和 XML 都不太適合表示二進制數據,因為這兩種數據格式作為原始數據都是基于字符而不是基于字節的。
JSONP(帶填充的 JSON)
編輯工作原理
通常,對服務器的 Ajax 數據請求是通過 Web 瀏覽器的 XMLHTTPRequest 對象發出的。 由于同源策略,如果 Web 瀏覽器中顯示的網站試圖通過與顯示的網站位于不同域中的此對象訪問服務器,這將不起作用。 這個問題可以通過 JSONP 來規避。 可以在 元素的 src 屬性中指定任何 URL。 同源策略不適用于該屬性。 因此,可以在另一個域中指定一個返回 JSON 數據的 URL。 但是這個腳本不會有任何效果。
為了能夠在客戶端處理 JSON 數據,服務器將其打包為已在 Web 瀏覽器中定義的 JavaScript 函數中的參數。 此函數的名稱通常在 URL 的查詢字符串中提供給服務器,盡管確切的格式或參數名稱并未標準化。
內容由提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/371944/