JSON

维基百科,自由的百科全书

跳转到: 导航, 搜索

JSONJavascript Object Notation)是一種輕量級的資料交換語言,以文字為基礎,且易於讓人閱讀。儘管JSON是在Javascript的一個子集,但JSON是獨立於語言的文本格式,並且採用了類似於C語言家族的一些習慣。

目录

[编辑] 簡介

JSON格式是1999年JavaScript Programming Language, Standard ECMA-262 3rd Edition》的子集合,所以可以在JavaScripteval()函式(javascript通過eval()調用解釋器)讀入。不過這並不代表JSON無法使用於其他語言,事實上幾乎所有與網頁開發相關的語言都有JSON函式庫。

JSON用於描述數據結構,有兩種基本形式存在。

  • 名稱/值對(collection):名稱和值之間使用「:」隔開,每個名稱/值對之間使用「,」分割,並且使用「{」「}」括起來;一般的形式是:
{name:value}

這樣的數據描述在不同的語言中會被解釋成不同的形式,可能是對象,結構體,哈希表等。

  • 值的有序列表(Array):一個或者多個值用「,」分割後,使用「[」,「]」括起來就形成了這樣的列表,形如:
[collection, collection]

在很多語言中它被解釋為陣列。

JSON的格式描述可以參考RFC 4627

[编辑] 安全性問題

[编辑] JavaScript的eval()

由於JSON在語法上是JavaScript的子集合,所以一般都會使用eval()作為讀取資料的方式,這在JSON資料提供站台與使用站台都屬於可信賴時並不會有問題。但如果資料提供站台不在信任範圍內,將JavaScript程式碼嵌入JSON,則會造成安全上的問題。

其中一種防止不安全代碼出現的解決辦法是透過parseJSON()讀取JSON資料[1]parseJSON採用解析器驗證讀入的代碼是否真的是JSON代碼,這樣就提供了較好的安全性。但是,由於這是用模擬的方式讀取,速度上會比eval()慢。

[编辑] 跨站存取問題

另外一個安全上的問題則是跨站請求偽造(Cross-site request forgery,簡稱CSRF或XSRF)。這個問題在Javascript中的狀況是,由於Javascript採用了稱為「沙盒」的機制,這種機制限制Javascript引擎僅能引入同一個站點的代碼,因而某種程度上提高了安全性。

[编辑] 與其他格式的比較

[编辑] XML

JSON與XML最大的不同在於XML是一個完整的標記語言,而JSON不是。這使的XML在程式判讀上需要比較多的功夫。主要的原因在於XML的設計理念與JSON不同。XML利用標記語言的特性提供了絕佳的延展性(如XPath),而JSON的重點在於資料的交換。

[编辑] YAML

[编辑] 參考文獻

[编辑] 參見

[编辑] 外部連結

  • (英文) JSON,關於JSON的規格、文件,以及在其他語言實做的資訊
  • (英文) RFC 4627,JSON在RFC裡的規格
个人工具