Json-path學習筆記<一>

Json

JavaScript Object Notation (JSON)是一個輕量級的,基於文本的,跨語言的數據交換格式。它從ECMAScript編程語言標準(ECMAScript Programming Language Standard)衍生而來。JSON定義了一組用於表示結構化數據的可移植的格式化規則。編程

簡介

JSON是用於結構化數據序列化的一種文本格式,JSON包含4種基礎類型(字符串,數字,布爾和null)和兩種結構類型(對象和數組)。
字符串是一個由零或者多個Unicode字符組成的序列。
對象是一個由零或者多個名/值對組成的無序集合,其中名/值對中名是字符串類型,值則能夠是字符串,數字,布爾,null,對象或數組類型。
數組是一個由零或者多個值組成的有序序列。
JSON的設計目標是它應當是儘量小的,可移植的,文本化的,而且能夠做爲JavaScript的一個子集。json


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的語法。


IANA(互聯網數字分配機構)方面的考慮

  • JSON文本的MIME媒體類型是application/json。JSON能夠用UTF-8,UTF-16和UTF-32編碼表示。若是使用UTF-8,則JSON是8位字節兼容的。若是是UTF-16或UTF-32,則必須使用二進制內容傳輸編碼。

  • 一般,腳本語言都有安全問題,JSON做爲JavaScript的一個子集,但因爲它排除了分配和調用,因此它是安全的。

  • JSON發佈規範:RFC 4627


Json示例

{
   "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格式定義

相關文章
相關標籤/搜索