新四季網

json基礎知識串講(JSON教程簡介語法)

2023-04-23 19:01:29

JSON 教程

JSON: JavaScript Object Notation(JavaScript 對象表示法)

JSON 是存儲和交換文本信息的語法。類似 XML。

JSON 比 XML 更小、更快,更易解析。

JSON 實例

{"sites": [{"name":"h5混合開發" , "url":"www.dongyibiancheng.com"}, {"name":"google" , "url":"www.google.com"}, {"name":"微博" , "url":"www.weibo.com"}]}

這個 sites 對象是包含 3 個站點記錄(對象)的數組。

什麼是 JSON ?

JSON 指的是 JavaScript 對象表示法(JavaScript Object Notation)

JSON 是輕量級的文本數據交換格式

JSON 獨立於語言:JSON 使用 Javascript語法來描述數據對象,但是 JSON 仍然獨立於語言和平臺。JSON 解析器和 JSON 庫支持許多不同的程式語言。 目前非常多的動態(PHP,JSP,.NET)程式語言都支持JSON。

JSON 具有自我描述性,更易理解

JSON - 轉換為 JavaScript 對象

JSON 是純文本

JSON 具有"自我描述性"(人類可讀)

JSON 具有層級結構(值中存在值)

JSON 可通過 JavaScript 進行解析

JSON 數據可使用 AJAX 進行傳輸

與 XML 不同之處

沒有結束標籤

更短

讀寫的速度更快

能夠使用內建的 JavaScript eval 方法進行解析

使用數組

不使用保留字

為什麼使用 JSON?

對於 AJAX 應用程式來說,JSON 比 XML 更快更易使用:

使用 XML

讀取 XML 文檔

使用 XML DOM 來循環遍歷文檔

讀取值並存儲在變量中

使用 JSON

讀取 JSON 字符串

用 eval 處理 JSON 字符串

JSON 語法

JSON 語法是 JavaScript 語法的子集。

JSON 語法規則

JSON 語法是 JavaScript 對象表示法語法的子集。

數據在名稱/值對中

數據由逗號分隔

大括號保存對象

中括號保存數組

JSON 名稱/值對

JSON 數據的書寫格式是:名稱/值對。

名稱/值對包括欄位名稱(在雙引號中),後面寫一個冒號,然後是值:

"name" : "h5混合開發"

這很容易理解,等價於這條 JavaScript 語句:

name = "h5混合開發"

JSON 值

JSON 值可以是:

數字(整數或浮點數)

字符串(在雙引號中)

邏輯值(true 或 false)

數組(在中括號中)

對象(在大括號中)

null

JSON 數字

JSON 數字可以是整型或者浮點型:

{"age":30}

JSON 對象

JSON 對象在大括號({})中書寫:

對象可以包含多個名稱/值對:

{"name":"h5混合開發" , "url":"www.xxxx.com"}

這一點也容易理解,與這條 JavaScript 語句等價:

name = "h5混合開發"url = "www.xxxx.com"

JSON 數組

JSON 數組在中括號中書寫:

數組可包含多個對象:

{"sites": [{"name":"h5混合開發" , "url":"www.xxx.com"}, {"name":"google" , "url":"www.google.com"}, {"name":"微博" , "url":"www.weibo.com"}]}

在上面的例子中,對象 "sites" 是包含三個對象的數組。每個對象代表一條關於某個網站(name、url)的記錄。

JSON 布爾值

JSON 布爾值可以是 true 或者 false:

{"flag":true}

JSON null

JSON 可以設置 null 值:

{"runoob":null}

JSON 使用 JavaScript 語法

因為 JSON 使用 JavaScript 語法,所以無需額外的軟體就能處理 JavaScript 中的 JSON。

通過 JavaScript,您可以創建一個對象數組,並像這樣進行賦值:

實例

varsites = [{"name":"runoob" , "url":"www.xxxx.com"}, {"name":"google" , "url":"www.google.com"}, {"name":"微博" , "url":"www.weibo.com"}];

可以像這樣訪問 JavaScript 對象數組中的第一項(索引從 0 開始):

sites[0].name;

返回的內容是:

runoob

可以像這樣修改數據:

sites[0].name="h5混合開發";

嘗試一下 »

在下面的章節,您將學到如何把 JSON 文本轉換為 JavaScript 對象。

JSON 文件

JSON 文件的文件類型是 ".json"

JSON 文本的 MIME 類型是 "application/json"

JSON 對象

對象語法

實例

{"name":"runoob", "alexa":10000, "site":null}

JSON 對象使用在大括號({})中書寫。

對象可以包含多個 key/value(鍵/值)對。

key 必須是字符串,value 可以是合法的 JSON 數據類型(字符串, 數字, 對象, 數組, 布爾值或 null)。

key 和 value 中使用冒號(:)分割。

每個 key/value 對使用逗號(,)分割。

訪問對象值

你可以使用點號(.)來訪問對象的值:

實例

varmyObj, x;myObj = {"name":"runoob", "alexa":10000, "site":null};x = myObj.name;

嘗試一下 »

你也可以使用中括號([])來訪問對象的值:

實例

varmyObj, x;myObj = {"name":"runoob", "alexa":10000, "site":null};x = myObj["name"];

嘗試一下 »

循環對象

你可以使用 for-in 來循環對象的屬性:

實例

varmyObj = {"name":"runoob", "alexa":10000, "site":null};for(xinmyObj){document.getElementById("demo").innerHTML = x "";}

嘗試一下 »

在 for-in 循環對象的屬性時,使用中括號([])來訪問屬性的值:

實例

varmyObj = {"name":"runoob", "alexa":10000, "site":null};for(xinmyObj){document.getElementById("demo").innerHTML = myObj[x] "";}

嘗試一下 »

嵌套 JSON 對象

JSON 對象中可以包含另外一個 JSON 對象:

實例

myObj = {"name":"runoob", "alexa":10000, "sites": {"site1":"www.xxxx.com", "site2":"m.runoob.com", "site3":"c.runoob.com"}}

你可以使用點號(.)或者中括號([])來訪問嵌套的 JSON 對象。

實例

x = myObj.sites.site1;// 或者x = myObj.sites["site1"];

嘗試一下 »

修改值

你可以使用點號(.)來修改 JSON 對象的值:

實例

myObj.sites.site1 = "www.google.com";

嘗試一下 »

你可以使用中括號([])來修改 JSON 對象的值:

實例

myObj.sites["site1"] = "www.google.com";

嘗試一下 »

刪除對象屬性

我們可以使用 delete 關鍵字來刪除 JSON 對象的屬性:

實例

deletemyObj.sites.site1;

嘗試一下 »

你可以使用中括號([])來刪除 JSON 對象的屬性:

實例

deletemyObj.sites["site1"]

嘗試一下 »

JSON 數組

數組作為 JSON 對象

實例

["Google", "Runoob", "Taobao"]

JSON 數組在中括號中書寫。

JSON 中數組值必須是合法的 JSON 數據類型(字符串, 數字, 對象, 數組, 布爾值或 null)。

JavaScript 中,數組值可以是以上的 JSON 數據類型,也可以是 JavaScript 的表達式,包括函數,日期,及 undefined。

JSON 對象中的數組

對象屬性的值可以是一個數組:

實例

{"name":"網站","num":3,"sites":["Google", "Runoob", "Taobao"]}

我們可以使用索引值來訪問數組:

實例

x = myObj.sites[0];

嘗試一下 »

循環數組

你可以使用 for-in 來訪問數組:

實例

for(iinmyObj.sites){x = myObj.sites[i] "";}

嘗試一下 »

你也可以使用 for 循環:

實例

for(i = 0; i < myObj.sites.length; i ){x = myObj.sites[i] "";}

嘗試一下 »

嵌套 JSON 對象中的數組

JSON 對象中數組可以包含另外一個數組,或者另外一個 JSON 對象:

實例

myObj = {"name":"網站", "num":3, "sites": [{"name":"Google", "info":["Android", "Google 搜索", "Google 翻譯"]}, {"name":"Runoob", "info":["h5混合開發", "h5混合開發工具", "h5混合開發微信"]}, {"name":"Taobao", "info":["淘寶", "網購"]}]}

我們可以使用 for-in 來循環訪問每個數組:

實例

for(iinmyObj.sites){x = "" myObj.sites[i].name ""; for(jinmyObj.sites[i].info){x = myObj.sites[i].info[j] ""; }}

嘗試一下 »

修改數組值

你可以使用索引值來修改數組值:

實例

myObj.sites[1] = "Github";

嘗試一下 »

刪除數組元素

我們可以使用 delete 關鍵字來刪除數組元素:

實例

deletemyObj.sites[1];

嘗試一下 »

JSON.parse

JSON 通常用於與服務端交換數據。

在接收伺服器數據時一般是字符串。

我們可以使用 JSON.parse 方法將數據轉換為 JavaScript 對象。

語法

JSON.parse(text[, reviver])

參數說明:

text:必需, 一個有效的 JSON 字符串。

reviver: 可選,一個轉換結果的函數, 將為對象的每個成員調用此函數。

JSON 解析實例

例如我們從伺服器接收了以下數據:

{"name":"runoob", "alexa":10000, "site":"www.xxx.com"}

我們使用 JSON.parse 方法處理以上數據,將其轉換為 JavaScript 對象:

varobj = JSON.parse('{ "name":"runoob", "alexa":10000, "site":"www.xxx.com" }');

解析前要確保你的數據是標準的 JSON 格式,否則會解析出錯。

你可以使用我們的在線工具檢測:https://c.runoob.com/front-end/53。

解析完成後,我們就可以在網頁上使用 JSON 數據了:

實例

var obj = JSON.parse('{ "name":"runoob", "alexa":10000, "site":"www.runoob.com" }');document.getElementById("demo").innerHTML = obj.name ":" obj.site;

嘗試一下 »

從服務端接收 JSON 數據

我們可以使用 AJAX 從伺服器請求 JSON 數據,並解析為 JavaScript 對象。

實例

varxmlhttp = newXMLHttpRequest;xmlhttp.onreadystatechange = function{if(this.readyState == 4 && this.status == 200){myObj = JSON.parse(this.responseText); document.getElementById("demo").innerHTML = myObj.name; }};xmlhttp.open("GET", "/try/ajax/json_demo.txt", true);xmlhttp.send;

嘗試一下 »

查看服務端數據: json_demo.txt

從服務端接收數組的 JSON 數據

如果從服務端接收的是數組的 JSON 數據,則 JSON.parse 會將其轉換為 JavaScript 數組:

實例

varxmlhttp = newXMLHttpRequest;xmlhttp.onreadystatechange = function{if(this.readyState == 4 && this.status == 200){myArr = JSON.parse(this.responseText); document.getElementById("demo").innerHTML = myArr[1]; }};xmlhttp.open("GET", "/try/ajax/json_demo_array.txt", true);xmlhttp.send;

嘗試一下 »

查看服務端數據: json_demo_array.txt

異常

解析數據

JSON 不能存儲 Date 對象。

如果你需要存儲 Date 對象,需要將其轉換為字符串。

之後再將字符串轉換為 Date 對象。

實例

vartext = '{ "name":"Runoob", "initDate":"2013-12-14", "site":"www.runoob.com"}';varobj = JSON.parse(text);obj.initDate = newDate(obj.initDate); document.getElementById("demo").innerHTML = obj.name "創建日期: " obj.initDate;

嘗試一下 »

我們可以啟用 JSON.parse 的第二個參數 reviver,一個轉換結果的函數,對象的每個成員調用此函數。

實例

vartext = '{ "name":"Runoob", "initDate":"2013-12-14", "site":"www.runoob.com"}';varobj = JSON.parse(text, function(key, value){if(key == "initDate"){returnnewDate(value); }else{returnvalue;}}); document.getElementById("demo").innerHTML = obj.name "創建日期:" obj.initDate;

嘗試一下 »

解析函數

JSON 不允許包含函數,但你可以將函數作為字符串存儲,之後再將字符串轉換為函數。

實例

vartext = '{ "name":"Runoob", "alexa":"function {return 10000;}", "site":"www.runoob.com"}';varobj = JSON.parse(text);obj.alexa = eval("(" obj.alexa ")"); document.getElementById("demo").innerHTML = obj.name " Alexa 排名:" obj.alexa;

嘗試一下 »

不建議在 JSON 中使用函數。

瀏覽器支持

主流瀏覽器都支持 JSON.parse 函數:

Firefox 3.5

Internet Explorer 8

Chrome

Opera 10

Safari 4

,
同类文章
葬禮的夢想

葬禮的夢想

夢見葬禮,我得到了這個夢想,五個要素的五個要素,水火只好,主要名字在外面,職業生涯良好,一切都應該對待他人治療誠意,由於小,吉利的冬天夢想,秋天的夢是不吉利的
找到手機是什麼意思?

找到手機是什麼意思?

找到手機是什麼意思?五次選舉的五個要素是兩名士兵的跡象。與他溝通很好。這是非常財富,它擅長運作,職業是仙人的標誌。單身男人有這個夢想,主要生活可以有人幫忙
我不怎麼想?

我不怎麼想?

我做了什麼意味著看到米飯烹飪?我得到了這個夢想,五線的主要土壤,但是Tu Ke水是錢的跡象,職業生涯更加真誠。他真誠地誠實。這是豐富的,這是夏瑞的巨星
夢想你的意思是什麼?

夢想你的意思是什麼?

你是什​​麼意思夢想的夢想?夢想,主要木材的五個要素,水的跡象,主營業務,主營業務,案子應該抓住魅力,不能疏忽,春天夢想的吉利夢想夏天的夢想不幸。詢問學者夢想
拯救夢想

拯救夢想

拯救夢想什麼意思?你夢想著拯救人嗎?拯救人們的夢想有一個現實,也有夢想的主觀想像力,請參閱週宮官方網站拯救人民夢想的詳細解釋。夢想著敵人被拯救出來
2022愛方向和生日是在[質量個性]中

2022愛方向和生日是在[質量個性]中

[救生員]有人說,在出生88天之前,胎兒已經知道哪天的出生,如何有優質的個性,將走在什麼樣的愛情之旅,將與生活生活有什么生活。今天
夢想切割剪裁

夢想切割剪裁

夢想切割剪裁什麼意思?你夢想切你的手是好的嗎?夢想切割手工切割手有一個真正的影響和反應,也有夢想的主觀想像力。請參閱官方網站夢想的細節,以削減手
夢想著親人死了

夢想著親人死了

夢想著親人死了什麼意思?你夢想夢想你的親人死嗎?夢想有一個現實的影響和反應,還有夢想的主觀想像力,請參閱夢想世界夢想死亡的親屬的詳細解釋
夢想搶劫

夢想搶劫

夢想搶劫什麼意思?你夢想搶劫嗎?夢想著搶劫有一個現實的影響和反應,也有夢想的主觀想像力,請參閱週恭吉夢官方網站的詳細解釋。夢想搶劫
夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂什麼意思?你夢想缺乏異常藥物嗎?夢想缺乏現實世界的影響和現實,還有夢想的主觀想像,請看官方網站的夢想組織缺乏異常藥物。我覺得有些東西缺失了