JSON 簡介
資料來源
簡介[編輯]
簡介[編輯]
JSON格式是1999年《JavaScript Programming Language, Standard ECMA-262 3rd Edition》的子集合,所以可以在JavaScript以
eval()
函式(javascript通過eval()調用解釋器)讀入。不過這並不代表JSON無法使用於其他語言,事實上幾乎所有與網頁開發相關的語言都有JSON函式庫。
JSON用於描述資料結構,有以下形式存在。
- 物件(object):一個物件以
{
開始,並以}
結束。一個物件包含一系列非排序的名稱/值對,每個名稱/值對之間使用,
分割。 - 名稱/值(collection):名稱和值之間使用
:
隔開,一般的形式是:
{name:value}
一個名稱是一個字串; 一個值可以是一個字串,一個數值,一個物件,一個布林值,一個有序列表,或者一個null值。
- 值的有序列表(Array):一個或者多個值用
,
分割後,使用[
,]
括起來就形成了這樣的列表,形如:
[collection, collection]
- 字串:以
""
括起來的一串字元。 - 數值:一系列0-9的數字組合,可以為負數或者小數。還可以用
e
或者E
表示為指數形式。 - 布林值:表示為true或者false。
JSON的格式描述可以參考RFC 4627。
應用領域[編輯]
WEB開發[編輯]
NoSQL資料庫[編輯]
舉例[編輯]
1 {
2 "firstName": "John",
3 "lastName": "Smith",
4 "sex": "male",
5 "age": 25,
6 "address":
7 {
8 "streetAddress": "21 2nd Street",
9 "city": "New York",
10 "state": "NY",
11 "postalCode": "10021"
12 },
13 "phoneNumber":
14 [
15 {
16 "type": "home",
17 "number": "212 555-1234"
18 },
19 {
20 "type": "fax",
21 "number": "646 555-4567"
22 }
23 ]
24 }
[
{
"text":"This is the text","color":"dark_red","bold":"true","strikethough":"true","clickEvent":
{"action":"open_url","value":"zh.wikipedia.org"},
"hoverEvent":
{"action":"show_text","value":
{"extra":"something"}
}
},
{
"translate":"item.dirt.name","color":"blue","italic":"true"
}
]
安全性問題[編輯]
讀取JSON[編輯]
由於JSON是JavaScript的子集,所以一般都會使用
eval()
作為讀取資料的方式,如果是針對可靠的資料來源,在不支援原生JSON解析的瀏覽器上面這是最快速的方法。然而由於eval方法同樣可以執行任意的JavaScript代碼,因此當資料來源不可靠時則可能產生安全性問題。如下面的例子,直接用eval執行時會跳轉:var json= eval("{message:(function (){ window.location='http://zh.wikipedia.org/wiki/JSON#.E5.AE.89.E5.85.A8.E6.80.A7.E5.95.8F.E9.A1.8C'; })()}");
其中一種防止不安全代碼出現的解決辦法,是透過瀏覽器原生支援的JSON.parse(str)方法讀取JSON資料,目前已經得到大部分主流瀏覽器的支援(IE8+,Firefox 3.5+,Chrome4+/Safari4+,Opera10+),在不支援原生JSON物件的瀏覽器上面可以使用
parseJSON
方法進行讀取[1],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更加小巧,以及瀏覽器的內建快速解析支援,使得其更適用於網路資料傳輸領域。
外部連結[編輯]
- (英文) JSON,關於JSON的規格、檔案,以及在其他語言實做的資訊
- JSON中文說明
- (英文) RFC 4627,JSON在RFC裡的規格 J
- SON格式化工具
- JSON分析器
- JSON格式
- JSON到CSV轉換器
- Minecraft中使用json文字的特殊格式
留言