JSON

来源:互联网 发布:exo金钟大网络春晚生病 编辑:程序博客网 时间:2024/04/29 09:33

JSON

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

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

目录

  [隐藏] 
  • 1 簡介
  • 2 目前流行的JSON在线工具
  • 3 举例
  • 4 安全性問題
    • 4.1 JavaScript的eval()
    • 4.2 跨站存取問題
  • 5 與其他格式的比較
    • 5.1 XML
    • 5.2 YAML
  • 6 參考文獻
  • 7 參見
  • 8 外部連結

[编辑]簡介

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。

[编辑]目前流行的JSON在线工具

这是一个网络当前网络上零散的JSON工具的网站,大家可以更方便的去验证或去查看自己的JSON格式是否正确。 参见 JSON在线工具

[编辑]举例

{     "firstName": "John",     "lastName": "Smith",     "male": true,     "age": 25,     "address":      {         "streetAddress": "21 2nd Street",         "city": "New York",         "state": "NY",         "postalCode": "10021"     },     "phoneNumber":      [         {           "type": "home",           "number": "212 555-1234"         },         {           "type": "fax",           "number": "646 555-4567"         }     ] }

[编辑]安全性問題

[编辑]JavaScript的eval()

由於JSON在語法上是JavaScript的子集合,所以一般都會使用eval()作為讀取資料的方式,如果是针对可靠的数据来源,在不支持原生JSON解析的浏览器上面这是最快速的方法。然而由于eval方法同样可以执行任意的JavaScript代码,因此当数据来源不可靠时则可能产生安全性问题。请考虑如下例子:

var json = {  message: (function () { window.location='http://zh.wikipedia.org/wiki/JSON/'; })()};

其中一種防止不安全代碼出現的解決辦法,是透過浏览器原生支持的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更加小巧,以及浏览器的内建快速解析支持,使得其更适用于网络数据传输领域。

原创粉丝点击