JavaScript:JSON 和 JS 對象

區別

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" } ] }

數據轉換

JSON 數據轉換爲 JS 對象

一、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 的支持。

JS 數據轉換爲 JSON 文本

使用 JSON.strigify() 函數,將 Javascript 對象轉換爲 JSON 文本數據。

 
var obj = {a:1,b:2} var txt = JSON.stringify(obj); console.log(txt); 結果: "{"a":1,"b":2}"
相關文章
相關標籤/搜索