JavaScript Object Notation (JSON)
是一個輕量級的,基於文本的,跨語言的數據交換格式
。它從ECMAScript編程語言標準(ECMAScript Programming Language Standard)衍生而來。JSON定義了一組用於表示結構化數據的可移植的格式化規則。編程
JSON是用於結構化數據序列化的一種文本格式,JSON包含4種基礎類型(字符串,數字,布爾和null)和兩種結構類型(對象和數組)。字符串
是一個由零或者多個Unicode字符組成的序列。對象
是一個由零或者多個名/值對組成的無序集合,其中名/值對中名是字符串類型,值則能夠是字符串,數字,布爾,null,對象或數組類型。數組
是一個由零或者多個值組成的有序序列。
JSON的設計目標
是它應當是儘量小的,可移植的,文本化的,而且能夠做爲JavaScript的一個子集。json
一個JSON文本是一個標記(token)序列,標記包含6種結構字符
,字符串,數字和3個字面量。數組
結構字符
:[ 左中括號,{ 左大括號, ] 右中括號, } 右大擴號,: 冒號,, 逗號。6種結構字符先後均可以添加無心義的空白字符。如:水平製表符\t,換行符\n,回車符\r安全
字面量
: false,null,true。字面量MUST是小寫的,其餘任何字面量都是不容許的。app
對象
結構表示爲一對大括號包裹着0到多個鍵/值對(或者叫成員)。鍵/值對中鍵是一個字符串,後面是一個冒號,用來分隔鍵和值。值後面是一個逗號用來分隔值和下一個鍵/值對的鍵。一個對象內的鍵SHOULD是惟一的。編程語言
數組
結構表示爲一對中括號包裹着0到多個值(或者叫元素)。值之間用逗號分隔。ui
數字
的表示和其餘大部分語言類似。數字包含一個以可選的減號爲前綴的整數部分,其後面能夠跟有小數部分和或指數部分。八進制或者十六進制的形式是不容許的。以0開頭也是不容許的。小數部分是一個小數點後跟隨一位或多位數字。指數部分以不限大小寫的字母E開頭,以後可跟一個加號或減號。E和可選的符號後可跟一位或多位數字。不能被表示爲數字的序列(例如,無窮大和NaN)的數字值是不容許的。編碼
字符串
用引號做爲開頭和結尾。除了如下一些必須被轉義的字符之外全部的Unicode字符均可以直接被放在字符串中:引號(」或’),反斜槓(\)和控制字符(U+0000 到 U+001F)。設計
JSON文本SHALL使用unicode編碼。默認的編碼方式爲UTF-8。
因爲JSON文本的頭兩個字符必定是ASCII字符[RFC0020],所以能夠經過觀察第一組4個8位字節來判斷字節流是UTF-8,UTF-16(BE或LE)仍是UTF-32(BE或LE)編碼的。code
JSON解析器能夠將JSON文本轉換爲其餘表示方法。JSON解釋器MUST能接受符合JSON語法的全部文本。JSON解析器MAY能接受非JSON形式的文本。
JSON生成器可以生成JSON文本。其生成結果MUST嚴格符合JSON的語法。
JSON文本的MIME媒體類型是application/json。JSON能夠用UTF-8,UTF-16和UTF-32編碼表示。若是使用UTF-8,則JSON是8位字節兼容的。若是是UTF-16或UTF-32,則必須使用二進制內容傳輸編碼。
一般,腳本語言都有安全問題,JSON做爲JavaScript的一個子集,但因爲它排除了分配和調用,因此它是安全的。
JSON發佈規範:RFC 4627
{ "Image": { "Width": 800, "Height": 600, "Title": "View from 15th Floor", "Thumbnail": { "Url": "http://www.example.com/image/481989943", "Height": 125, "Width": "100" }, "tags": [ "小清新", "動物" ] } }
[ECMA] European Computer Manufacturers Association, 「ECMAScript
Language Specification 3rd Edition」, December 1999,
<http://www.ecma-international.org/publications/files/
ecma-st/ECMA-262.pdf>.
[RFC0020] Cerf, V., 「ASCII format for network interchange」, RFC 20,
October 1969.
[RFC2119] Bradner, S., 「Key words for use in RFCs to Indicate
Requirement Levels」, BCP 14, RFC 2119, March 1997.
[RFC4234] Crocker, D. and P. Overell, 「Augmented BNF for Syntax
Specifications: ABNF」, RFC 4234, October 2005.
原文參考:Json格式定義