##什么是JSON
`JSON`:JavaScript 對象表示法(`J`ava`S`cript `O`bject `N`otation)。
`JSON`的形式是用大括號`“{}”`包圍起來的項目列表,每一個項目間用逗號(,)分隔,而項目就是用冒號(:)分隔的屬性名和屬性值。這是典型的字典表示形式,也再次表明`javascript`里的對象就是字典結構。不管多么復雜的對象,都可以用一句`JSON`代碼來創建并賦值。在`JSON`中,名稱/值對 包括字段名稱(在雙引號中),后面寫一個冒號,然后是值
##JSON 結構
JSON有兩種結構
`json`簡單說就是`javascript`中的對象和數組,所以這兩種結構就是對象和數組兩種結構,通過這兩種結構可以表示各種復雜的結構
1、對象:對象在js中表示為`“{}”`括起來的內容,數據結構為 `{key:value,key:value,...}`的鍵值對的結構,在面向對象的語言中,key為對象的屬性,value為對應的屬性值,所以很容易理解,取值方法為 對象`.key` 獲取屬性值,這個屬性值的類型可以是 數字、字符串、數組、對象幾種。
2、數組:數組在js中是中括號`“[]”`括起來的內容,數據結構為 `["java","javascript","vb",...]`,取值方式和所有語言中一樣,使用索引獲取,字段值的類型可以是 數字、字符串、數組、對象幾種。
經過對象、數組2種結構就可以組合成復雜的數據結構了。
##JSON 語法規則
`JSON` 語法是 `JavaScript` 對象表示法語法的子集。
```
數據在名稱/值對中
數據由逗號分隔
花括號保存對象
方括號保存數組
```
`JSON` 值可以是:
```
數字(整數或浮點數)
字符串(在雙引號中)
邏輯值(true 或 false)
數組(在方括號中)
對象(在花括號中)
null
```
?除以上6種外,再無其他,沒有像js一樣的undefined、NAN
```
1) 并列的數據之間用逗號(", ")分隔。
2) 映射用冒號(": ")表示。
3) 并列數據的集合(數組)用方括號("[]")表示。
4) 映射的集合(對象)用大括號("{}")表示。
```
對象是一套無序的名/值對,一個對象以左邊分支開始,以右邊分支結束

一個值可以是用雙引號括起來的字符串,或者是一個數值,一個`true or false` ,一個數組或者一個對象

##JSON與對象字面量
在編程語言中,字面量是一種表示值的記法。
`JSON`規定鍵值對中的`鍵`必須用雙引號! 引號。例如:
```
{"first name" : "Mike"};
```
在`JSON`字符串中,不能使用函數或者正則表達式字面量
##數據類型:
從結構上看,所有的數據(data)最終都可以分解成三種類型:
```
第一種類型是標量(scalar),也就是一個單獨的字符串(string)或數字(numbers),比如"北京"這個單獨的詞。
第二種類型是序列(sequence),也就是若干個相關的數據按照一定順序并列在一起,又叫做數組(array)或列表(List),比如"北京,上海"。
第三種類型是映射(mapping),也就是一個名/值對(Name/value),即數據有一個名稱,還有一個與之相對應的值,這又稱作散列(hash)或字典(dictionary),比如"首都:北京"。
```
在編程語言中,只要有了數組(array)和對象(object)就能夠儲存一切數據了。
數組和對象的另一個區別是,數組的數據沒有"名稱"(name),對象的數據有"名稱"(name)。
`JavaScript`中有5種簡單數據類型(也稱為基本數據類型):`Undefined`、`Null`、`Boolean`、`Number`和`String`。還有1種復雜數據類型——`Object`,`Object`本質上是由一組無序的名值對組成的。
對一個值使用`typeof`操作符可能返回下列某個字符串:
```
"undefined"——如果這個值未定義;
"boolean"——如果這個值是布爾值;
"string"——如果這個值是字符串;
"number"——如果這個值是數值;
"object"——如果這個值是對象或null;
"function"——如果這個值是函數;
```
### Undefined類型:
```
`Undefined`類型只有一個值,在使用var聲明變量但未對其加以初始化時,
這個變量的值就是undefined
```
### Null類型
Null類型是第二個只有一個值的數據類型,這個特殊的值是null。從邏輯角度來看,null值表示一個空對象指針,而這也正是使用typeof操作符檢測null時會返回"object"的原因,例如:
```
var car = null;
alert(typeof car); // "object"
```
### Number類型
這種類型用來表示整數和浮點數值,還有一種特殊的數值,即NaN(非數值 Not a Number)。這個數值用于表示一個本來要返回數值的操作數未返回數值的情況(這樣就不會拋出錯誤了)。
### String類型
`String`類型用于表示由零或多個16位`Unicode`字符組成的字符序列,即字符串。字符串可以由單引號(')或雙引號(")表示。
數值、布爾值、對象和字符串值都有`toString()`方法。但`null`和`undefined`值沒有這個方法。
多數情況下,調用`toString()`方法不必傳遞參數。但是,在調用數值的`toString()`方法時,可以傳遞一個參數:輸出數值的基數。
```
var num = 10;
alert(num.toString()); //"10"
alert(num.toString(2)); //"1010"
alert(num.toString(8)); //"12"
alert(num.toString(10)); //"10"
alert(num.toString(16)); //"a"
```
在不知道要轉換的值是不是`null`或`undefined`的情況下,還可以使用轉型函數`String()`,這個函數能夠將任何類型的值轉換為字符串。`String()`函數遵循下列轉換規則:
● 如果值有`toString()`方法,則調用該方法(沒有參數)并返回相應的結果
● 如果值是`null`,則返回"`null`"
● 如果值是`undefined`,則返回"`undefined`"
### Object類型
對象其實就是一組數據和功能的集合。對象可以通過執行`new`操作符后跟要創建的對象類型的名稱來創建。而創建`Object`類型的實例并為其添加屬性和(或)方法,就可以創建自定義對象。
```
var o = new Object();
```
##typeof 操作符
```
<script type="text/javascript">
var s = "Nicholas";
var b =true;
var c = 21;
var u;
var n = null;
var o = {};
var obj = new Object;//最好寫出new object()形式
alert(typeof s);//string
alert(typeof b);//boolean
alert(typeof c);//number
alert(typeof u);//undefined
alert(typeof n);//object
alert(typeof o);//object
alert(typeof obj);//object
</script>
```
##Json在線解析
Json在線解析:<http://json.tongxiehui.net/>
- JavaScript手冊
- Array函數
- String函數
- Date函數
- Mach函數
- Regexp函數
- Location函數
- Window 函數
- Other函數
- History函數
- Navigator函數
- Event函數
- Dom函數
- Json函數
- Sea.js手冊
- JavaScript學習總結
- 1.基礎部分
- 2.對象部分
- 3.BOM和DOM詳解
- 4.function函數部分
- 5.原型和原型鏈詳解
- 6.數據類型和JSON格式
- 7.Ajax和Http狀態字
- 8.正則表達式
- 9.事件詳解
- 前端相關網址
- 前端干貨文章
- JavaScript字符串常用的一些方法
- 前端開發知識體系
- JavaScript速成課
- 移動端開發技巧
- 移動端Web頁面問題解決方案
- 20個常用的CSS技巧
- 學習JavaScript設計模式
- 前端開發學習總結