[TOC]
**JSON**(JavaScript Object Notation) 是一種輕量級的數據交換格式。 易于人閱讀和編寫。同時也易于機器解析和生成。
JSON 采用完全獨立于語言的文本格式,但是也使用了類似于 C 語言家族的習慣(包括 C, C++, C#, Java, JavaScript, Perl, Python 等)。 這些特性使 JSON 成為理想的數據交換語言。
**JSON:JavaScript 對象表示法(JavaScript Object Notation)。**
**JSON 是存儲和交換文本信息的語法。類似 XML。**
**JSON 比 XML 更小、更快,更易解析。**
JSON 建構于兩種結構:
- “名稱/值”對的集合(A collection of name/value pairs)。不同的語言中,它被理解為*對象(object)*,紀錄(record),結構(struct),字典(dictionary),哈希表(hash table),有鍵列表(keyed list),或者關聯數組 (associative array)。
- 值的有序列表(An ordered list of values)。在大部分語言中,它被理解為數組(array)。
這些都是常見的數據結構。事實上大部分現代計算機語言都以某種形式支持它們。這使得一種數據格式在同樣基于這些結構的編程語言之間交換成為可能。
JSON 具有以下這些形式:
對象是一個無序的“‘名稱/值’對”集合。一個對象以“{”(左括號)開始,“}”(右括號)結束。每個“名稱”后跟一個“:”(冒號);“‘名稱/值’ 對”之間使用“,”(逗號)分隔。

數組是值(value)的有序集合。一個數組以“[”(左中括號)開始,“]”(右中括號)結束。值之間使用“,”(逗號)分隔。

值(_value_)可以是雙引號括起來的字符串(_string_)、數值(number)、`true`、`false`、 `null`、對象(object)或者數組(array)。這些結構可以嵌套。

字符串(_string_)是由雙引號包圍的任意數量 Unicode 字符的集合,使用反斜線轉義。一個字符(character)即一個單獨的字符串(character string)。
字符串(_string_)與 C 或者 Java 的字符串非常相似。

數值(_number_)也與 C 或者 Java 的數值非常相似。除去未曾使用的八進制與十六進制格式。除去一些編碼細節。

空白可以加入到任何符號之間。 以下描述了完整的語言。
## 實例
```javascript
{
"employees": [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName":"Carter" }
]
}
```
這個 employee 對象是包含 3 個員工記錄(對象)的數組。
## JSON 語法規則
JSON 語法是 JavaScript 對象表示法語法的子集。
- 數據在名稱/值對中
- 數據由逗號分隔
- 花括號保存對象
- 方括號保存數組
## JSON 名稱/值對
JSON 數據的書寫格式是:名稱/值對。
名稱/值對包括字段名稱(在雙引號中),后面寫一個冒號,然后是值:
```
"firstName" : "John"
```
這很容易理解,等價于這條 JavaScript 語句:
```
firstName = "John"
```
## JSON 值
JSON 值可以是:
- 數字(整數或浮點數)
- 字符串(在雙引號中)
- 邏輯值(true 或 false)
- 數組(在方括號中)
- 對象(在花括號中)
- null
## JSON 對象
JSON 對象在花括號中書寫:
對象可以包含多個名稱/值對:
```
{ "firstName":"John" , "lastName":"Doe" }
```
這一點也容易理解,與這條 JavaScript 語句等價:
```
firstName = "John"
lastName = "Doe"
```
## JSON 數組
JSON 數組在方括號中書寫:
數組可包含多個對象:
```javascript
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
```
在上面的例子中,對象 "employees" 是包含三個對象的數組。每個對象代表一條關于某人(有姓和名)的記錄。
## JSON 使用 JavaScript 語法
因為 JSON 使用 JavaScript 語法,所以無需額外的軟件就能處理 JavaScript 中的 JSON。
通過 JavaScript,您可以創建一個對象數組,并像這樣進行賦值:
### 例子
```
var employees = [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName": "Carter" }
];
```
可以像這樣訪問 JavaScript 對象數組中的第一項:
```
employees[0].lastName;
```
返回的內容是:
```
Gates
```
可以像這樣修改數據:
```
employees[0].lastName = "Jobs";
```
**JSON**對象包含兩個方法: 用于解析 [JavaScript Object Notation](111)` 方法。除了這兩個方法, JSON 這個對象本身并沒有其他作用
- [`JSON.parse()`](111)
解析JSON字符串并返回對應的值
- [`JSON.stringify()`](111)
返回與指定值對應的JSON字符串
### JSON.parse() 返回值
[`Object`](111)類型, 對應給定 JSON 文本的對象/值。
### 異常
若傳入的字符串不符合 JSON 規范,則會拋出 [`SyntaxError`](111) 異常。
### 使用 `JSON.parse()`
```js
JSON.parse("{}"); // {}
JSON.parse("true"); // true
JSON.parse('"foo"'); // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse("null"); // null
JSON.parse("1"); // 1
```
### `JSON.parse()` 不允許用逗號作為結尾
```js
// both will throw a SyntaxError
JSON.parse("[1, 2, 3, 4, ]");
JSON.parse('{"foo" : 1, }');
```
### `JSON.stringify()` 方法是將一個 JavaScript 值(對象或者數組)轉換為一個 JSON 字符串
- 每日單詞
- JavaScript 入門
- JavaScript 基礎
- JavaScript 基礎回顧
- JavaScript 函數
- 匿名函數,多維數組,數據類型轉換
- JavaScript 類型轉換, 變量作用域
- js 運算符(一)
- js 運算符(二)
- js 流程控制語句
- JavaScript 掃盲日
- JavaScript 牛刀小試(一)
- JavaScript 牛刀小試(二)
- JavaScript 再談函數
- JavaScript-BOM
- JavaScript-定時器(一)
- JavaScript-定時器(二)
- 番外-輪播圖源碼
- JavaScript 輪播圖和 DOM 簡介
- JavaScript-DOM 基礎-NODE 接口-屬性
- JavaScript-DOM 基礎-NODE 接口-方法
- NodeList-接口-HTMLCollection-接口
- Document 節點
- CSS 復習與擴展(一)
- CSS 復習與擴展(二)
- 走進 jQuery 的世界
- 使用 jquery
- 使用 jquery-2
- jquery 中高級
- jquery 備忘清單-1
- jquery 備忘清單-2
- 聊聊 json
- jquery 備忘清單-3