天天看點

JavaScript JSON的總結

json 是用于存儲和傳輸資料的格式,通常用于服務端向網頁傳遞資料

json英文全稱 javascript object notation(javascript 對象表示法),是一種輕量級的用于存儲和交換文本資訊的文法,被設計用于可讀的資料交換,類似 xml,但比 xml 更小、更快,json具有自我描述性,更易了解

json是從 javascript 腳本語言中演變而來,使用javascript文法來描述資料對象,檔案名擴充是 .json,但是json格式僅僅是一個文本,仍然獨立于語言和平台。json 解析器和 json 庫支援許多不同的程式設計語言。 目前非常多的動态(php,jsp,.net)程式設計語言都支援json

json 格式可以用于通過網絡連接配接序列化和傳輸結構化資料,用于編寫基于 javascript 應用程式,包括浏覽器擴充和網站。json 主要用于在伺服器和 web 應用程式之間傳輸資料,web 服務和 apis 可以使用 json 格式提供公用資料,還可以用于現代程式設計語言中

json 的文法基本上可以視為 javascript 文法的一個子集,包括以下内容:

資料使用名/值對表示

使用大括号儲存對象,每個名稱後面跟着一個 ':'(冒号),名/值對使用 ,(逗号)分割

使用方括号儲存數組,數組值使用 ,(逗号)分割

名/值對集合: 這一資料結構由不同的程式設計語言支援

有序的值清單: 包括數組,清單,向量或序列等等

json 文法是 javascript 對象文法的子集

資料在名稱/值對中

資料由逗号分隔

花括号儲存對象

方括号儲存數組

json 資料的書寫格式是:名稱/值對

名稱/值對包括字段名稱(在雙引号中),後面寫一個冒号,然後是值:

等價于這條 javascript 語句:

json 值可以是:

數字(整數或浮點數)

字元串(在雙引号中)

邏輯值(true 或 false)

數組(在方括号中)

對象(在花括号中)

null

json 對象在花括号中書寫,對象可以包含多個名稱/值對

json 數組在方括号中書寫,數組可包含多個對象

因為 json 使用 javascript 文法,是以無需額外的軟體就能處理 javascript 中的 json。javascript 程式使用内建的 eval() 函數,用 json 資料來生成原生的 javascript 對象。

通過 javascript,您可以建立一個對象數組,并像上面代碼那樣指派。然後像這樣通路 javascript 對象數組中的第一項

傳回的内容是:

也可以像這樣修改資料:

json 檔案的檔案類型是 ".json"

json 文本的 mime 類型是 "application/json"

json 最常見的用法之一,是從 web 伺服器上讀取 json 資料(作為檔案或作為 httprequest),将 json 資料轉換為 javascript 對象,然後在網頁中使用該資料。

簡單起見,我們直接設定 json 字元串:

首先,建立 javascript 字元串,字元傳為 json 格式的資料:

由于 json 文法是 javascript 文法的子集,javascript 函數 eval() 可用于将 json 文本轉換為 javascript 對象

eval() 函數使用的是 javascript 編譯器,可解析 json 文本,然後生成 javascript 對象。必須把文本包圍在括号中,這樣才能避免文法錯誤:

在網頁中使用 javascript 對象:

eval() 函數可編譯并執行任何 javascript 代碼,這隐藏了一個潛在的安全問題。使用 json 解析器将 json 轉換為 javascript 對象是更安全的做法。json 解析器隻能識别 json 文本,而不會編譯腳本。在浏覽器中,提供了原生的 json 支援,而且 json 解析器的速度更快。較新的浏覽器和最新的 ecmascript (javascript) 标準中均包含了原生的對 json 的支援

jsonp(json with padding) 是 json 的一種"使用模式",可以讓網頁從别的域名(網站)那擷取資料,即跨域讀取資料

為什麼我們從不同的域(網站)通路資料需要一個特殊的技術(jsonp )呢?這是因為同源政策。

同源政策,是由netscape提出的一個著名的安全政策,現在所有支援javascript 的浏覽器都會使用這個政策

如客戶想通路 : /try/ajax/jsonp.php?jsonp=callbackfunction,

假設客戶期望傳回json資料:["customername1","customername2"]。

真正傳回到用戶端的資料顯示為: callbackfunction(["customername1","customername2"])。

服務端檔案jsonp.php代碼為:

以上代碼可以使用 jquery 代碼實作:

繼續閱讀