JSON(JavaScript Object Notation)僅僅是一種數據格式(或者叫數據形式)。數據格式其實就是一種規範,按照這種規範來存諸和交換數據。就好像 XML 格式同樣。javascript
區別 | Json | Javascript對象 |
---|---|---|
含義 | 僅僅是一種數據格式 | 對象的實例 |
傳輸 | 能夠跨平臺數據傳輸,速度快 | 不能傳輸 |
表現 | 1. 鍵值對 2. 鍵必須加雙引號 3. 值不能爲方法函數/undefined/NaN |
1.鍵值對 2.值能夠是函數、對象、字符串、數字、boolean 等 |
相互轉換 | Json → JS 對象: 1. var obj = JSON.parse(jsonstring); 2. var obj = eval("("+jsonstring+")"); |
JS 對象 → Json:JSON.stringify(obj); |
JSON 文本格式在語法上與建立 JavaScript 對象的代碼相同,但本質是不一樣的。咱們不能把如下的對象叫 JSON,好比:java
var obj1 = {}; // 這只是 JS 對象 // 可把這個稱作:JSON 格式的 JavaScript 對象 var obj2 = {"width":100,"height":200,"name":"rose"}; // 可把這個稱作:JSON 格式的字符串 var str1 = '{"width":100,"height":200,"name":"rose"}'; // 這個可叫 JSON 格式的數組,是 JSON 的稍複雜一點的形式 var arr = [ {"width":100,"height":200,"name":"rose"}, {"width":100,"height":200,"name":"rose"}, {"width":100,"height":200,"name":"rose"}, ]; // 這個可叫稍複雜一點的 JSON 格式的字符串 var str2='['+ '{"width":100,"height":200,"name":"rose"},'+ '{"width":100,"height":200,"name":"rose"},'+ '{"width":100,"height":200,"name":"rose"},'+ ']';
但 JSON 和 JavaScript 確實存在淵源,JSON 自己的意思就是 JavaScript 對象表示法(JavaScript Object Notation),能夠說這種數據格式是從 JavaScript 對象中演變出來的。JSON 語法是 JavaScript 對象表示法語法的子集。編程
JSON 格式的數據,主要是爲了跨平臺交流數據用的。JSON 獨立於語言和平臺,JSON 解析器和 JSON 庫支持許多不一樣的編程語言。json
一、JSON 語法規則:數組
數據在名稱/值對中瀏覽器
數據由逗號分隔安全
花括號保存對象數據結構
方括號保存數組編程語言
二、JSON 數據值:函數
數字(整數或浮點數)
字符串(在雙引號中)
邏輯值(true 或 false)
數組(在方括號中)
對象(在花括號中)
null
JSON 數據結構有兩種,這兩種結構就是對象和數組,經過這兩種結構能夠表示各類複雜的結構。
JSON 使用嚴格的 JavaScript 對象表示法來表示結構化的數據,所以 JSON 的屬性名必須有雙引號。
{ "company": "Apple", "age": 18, "IPO", true, "employees": [ { "firstName":"John" , "lastName":"Doe" }, { "firstName":"Anna" , "lastName":"Smith" }, { "firstName":"Peter" , "lastName":"Jones" } ] }
一、JS 解析器:eval() 函數
// 建立包含 JSON 語法的 JavaScript 字符串 var txt = '{ "employees" : [' + '{ "firstName":"John" , "lastName":"Doe" },' + '{ "firstName":"Anna" , "lastName":"Smith" },' + '{ "firstName":"Peter" , "lastName":"Jones" } ]}'; //使用 JS 解析器,解析 JSON 文本並生成 JS 對象 var obj = eval("(" + txt + ")");
使用 eval() 函數時,必須爲傳入的 JSON 數據參數添加括號'()',不然會報語法錯誤。
二、 解析器:parse()函數
但 eval() 的問題在於,除了能夠解析 JSON 數據,也能夠用於執行 JavaScript 腳本片斷,這就會帶來潛在的安全問題。JSON 提供了專門的 JSON Parser 來實現只用於解析 JSON 數據,不會執行 JavaScript 腳本,並且速度更快。以下:
var obj = JSON.parse(txt);
較新的瀏覽器和最新的 ECMAScript (JavaScript) 標準中均包含了原生的對 JSON 的支持。
使用 JSON.strigify() 函數,將 Javascript 對象轉換爲 JSON 文本數據。
var obj = {a:1,b:2} var txt = JSON.stringify(obj); console.log(txt); 結果: "{"a":1,"b":2}"