JSON
JSON(JavaScriptObjectNotation , / ˈdʒeɪsən /)係由米國程式設計師道格拉斯 ・ 克羅克福特構想愛同設計个一種輕量級資料交換格式。厥个內容係性還有值所組成个,故所也有當容易閱讀摎處理个優勢。JSON 係獨立於程式語言个資料格式,這毋單淨係 JavaScript 个子集,也採用著了 C 語言家族个習慣用法,目前也有異多程式个語言都能夠將佢个解析摎字串化,使用个程度也成為通用个資料格式。
簡介
JSON 格式係一九九年《_ JavaScript Programming Language , Standard ECMA 兩百六十二三 rd Edition _》个子集合,故所做得在 JavaScript 以 ` eval ( ) `函式(javascript 通過 eval ( ) 喊解析器)讀入。無過這無代表 JSON 無法度用到其他个語言,事實上幾乎所有摎網路開發相關个語言都有 JSON 函式庫。
JSON 个基本資料類型:
- 數值:十進位數,做毋得有前導零,做得為負數,做得有小數部分。還做得用 `e` 或者係 `E` 表示指數部分。做毋得包含非數,像係NaN。毋區分整數同浮點數。JavaScript 用雙精度浮點數表示所有个數值。
- 字串:以雙引號 `" "` 括起來个零隻抑係幾下隻 Unicode 碼位。這支援打斜槓開始个跳脫字元序列。
- 布林值:表示為 ` true ` 或者係 ` false `。
- 陣列:有序个零個抑係幾下隻值。每一隻值得為任意个類型。陣列使用方有號 `[]` 包裹。當多陣列元素之間用逗號 `,` 分隔,形投:` [ value , value] `。
- 物件:係干無序个「鍵 - 值著」( key-value pairs ),其中鍵單淨做得係字串。建議毋過毋強制要求物件當中个鍵係獨一無二个。物件以花括號 `{ }` 包裹。當多隻鍵 - 值著之間使用逗號 `,` 分隔。鍵摎值之間用冒號 `:` 分隔。
- 空值:值寫為 ` null `
token(六種標點符號、字串、數值、三種字面量)之間做得有限个空白符並分人忽略。四隻特定字分人認為係空白符:空格符合、水平制表符、轉車仔字元、換行符。空白符做毋得出現在 token 內部(毋過空格符做得出現在字串內部)。 JSON 標準不准有一位元組序揞等,不提供注釋个句法。一个有效个 JSON 文件个根節點定著係一個物件或者一個陣列。
JSON 交換个時節必須愛編碼為 UTF 八十五。跳脫序列做得為:「 \ \」、「 \ "」、「 \ /」、「 \ b」、「 \ f」、「 \ n」、「 \ r」、「 \ t」,抑係 Unicode 十六進位跳脫字元个序列(\ u 後背跈等四位元十六入位數字)。 對於無在基本多文種平面上个碼位,定著愛用 UTF 十六代理著(surrogate pair)表示,比將講對於 Emoji 字元——喜歡噭个表情(U + 一 F 六百空二 😂 FACE WITH TEARS OF JOY)在 JSON 中應表示為著:
JSON 个格式描述做得參考 RFC 四千六百二十七。
應用領過域
元資料同架構
JSON 文字个官方媒體類型係雙引號,這點在大部分現代个鬥中都採用了這種類型。因為傳統原因,異多服務提供著商、瀏覽器、伺服器、Web 應用程式、庫、框架同 API 也支援非官方仔 MIME 類型或者係內容類型。值得注意个例仔包含谷歌搜尋 API,雅虎,面書个 API,Lift,摎 Dojo Toolkit。JSON 架構指定一種因為 JSON 个格式,用來定義用於驗證、文件還過互動控制个 JSON 資料个結構。佢為著分定應用程式需要个 JSON 資料還有仰仔修改該資料提供協定。JSON 架構基於 XML 架構(XSD)中个概念,毋過因為 JSON。摎在 XSD 中共樣,相同个序列化 / 反序列化工具做得用在架構還有資料,還過佢係自家講个。佢在 IETF 个網際網路草案當中指定,目前為二千空二十 - 一二年草案,在二零二一年一月二十八發布。有幾個驗證器做得用在無共樣个程式語言,逐個驗證器都有無共樣程度个一致性。標準副檔名為 . json。JSON 標準毋支援物件參照,毋過存在基於 JSON 个物件參照个 IETF 草案標準。
WEB 開發
JSON 最開始分人廣泛个應用在 WEB 應用个開發。毋過目前 JSON 使用在 JavaScript、Java、Node . js、C # 應用个情況較多,PHP 等開發个 WEB 應用主要還係使用 XML。
NoSQL 資料庫
相對傳統關係型資料庫, 有个係文件儲存个 NoSQL 毋係安做資料庫个選擇 JSON 做佢个資料儲存格式,較出名个產品有:MongoDB、CouchDB、RavenDB 等。
舉例
這種JSON 格式也分當多个遊戲(像係 Minecraft)或者應用軟體用來做作个部分資料儲存个格式:
安全問題
讀取 JSON
因為 JSON 好 JavaScript 个子集,故所一般都會用著 ` eval ( ) ` 作為讀取資料个方式,係針對可靠个資料來源,在毋支援原生 JSON 解析个瀏覽器頂項這係盡遽速个方法。毋過因為 eval 方法共樣做得執行隨意个 JavaScript 代碼,故所當資料來源做毋得靠个時節可能會產生安全个問題。像下背个例仔,直接用 eval 執行个時節會跳轉:
其中一種防止無安全程式碼出現个解決辦法,係通過瀏覽器原生支援个 ` JSON . parse ( str ) ` 方法讀取 JSON 資料,目前已經得著大部分主流瀏覽器个支援(IE 八 +,Firefox 三痕五 +,Chrome 四 + / Safari 四 +,Opera 十 +), 在毋支援原生 JSON 物件个瀏覽器頂項做得使用 ` parseJSON ` 方法來進行讀取,` parseJSON ` 採用解析器驗證讀入个程式碼係毋係正經个好 JSON 程式碼,恁仔就過安全。毋過因為這係用類比个方式讀取,速度項會比 ` eval ( ) ` 慢。
跨站存取問題
另外一個安全上个問題係跨站請求偽造(Cross-site request forgery,簡稱 CSRF 抑係 XSRF)。 這個問題在 Javascript 中个情形係,因為 Javascript 採用了安到「沙盒」个機制,這種機制限制 Javascript 引擎單淨做得引入共隻站點个程式碼,故所某種程度來提高吔安全性。
摎其他格式个比較
XML
JSON 摎 XML 盡大个無共樣哦XML 係一隻完整个標記語言,還過 JSON 毋係。這使得 XML 在程式判讀上需要較多个功夫。主要个原因係在 XML 个設計理念同 JSON 無共樣。XML 利用標記語言个特性提提供吔盡好个延展性(像係 XPath), 在資料儲存,擴大到進階檢索方面具備著 JSON 个優勢,還過 JSON 因為比 XML 還較細巧,還有瀏覽器个內建快速解析支援,分佢更加適用於網路頂路資料傳輸个領域。
MessagePack
MessagePack 講比 JSON 還較短,遽啊。
格式化工具
JSON 格式取代吔 XML 分網路傳輸帶來當大个便利,毋過嗄無咧 XML 个一目仔,尤其係 JSON 資料當長个時節,會分人感覺複雜又有兜資料。開發者做得使用線上 JSON 格式化工具,來過較方便个著啊JSON 資料進行節點尋摎解析。
參考文獻
一 . Apple 細路仔
參閱
- JSONP
- AJAX
- JavaScript
- YAML
- HOCON
外部連結
- (英文)JSON,有關 JSON 个規格、檔案,還有在其他語言實做个資訊
- JSON 中文說明
- (英文)RFC 四千六百二十七,JSON在 RFC 裡背个規格
- JSON 格式化工具 ( 中文 )
- JSON 編輯器
- JSON 剖析器
- JSON 到 CSV 轉換器
- Minecraft 指令 ─ JSON文字格式
- JSON 線上格式化工具