前言
這次要來聊網頁開發當中常見的名詞:JSON (JavaScript Object Notation) 格式
JSON 就是由 JavaScript 語法所組成的資料交換格式,可以在前、後端進行資料的傳遞。
但這不是說,JSON 只能在 JavaScript 這個程式語言使用,
像是 ASP.NET (C#) 也有辦法解析 JSON 格式。
如果能夠了解 JSON 格式的組成,以後將資料進行傳遞時,就比較能夠上手!
現在我就來整理 JSON 的常見用法~
貼心提醒:如果圖片看不清楚,可以點開看大圖喔~
什麼是 JSON
我在 JSON 的學習上,大部分都是參考 MDN 的官方文件。
我個人是蠻推薦閱讀的,因為官網寫得很清楚!
1. JSON 全名是 JavaScript Object Notation,是一種在網路上很常見的
「資料交換格式」。
就像剛才我有提到「網頁前後端」使用 RESTful API 傳遞資料,
所謂的資料可能就是「JSON」格式。
這麼做有一個好處,就是前後端都有「共同語言」,工程師們彼此知道自己在說什麼。
2. JSON 本身以 JavaScript 的語法構成的資料格式,可被視為「物件」或「字串」:
物件:從後端 API 拋回資料給前端。
字串:提交前端的表單,送到後端 API 處理商業邏輯。
3. JSON 本身可以是陣列、物件、字串等元素所構成。
一般來說,我會把 JSON 叫做「物件格式」,雖然它不一定是物件。
等一下我會給大家看 JSON 的長相,到時候你就會知道 JSON 可以有很多變形。
JSON 架構
這次我用 GitHub Gist 把 Source Code 放到文章裡面,應該會比上次我拿 Carbon 還要好。
我就直接叫 GitHub Copilot 幫我產生 JSON 物件,當然我還是有修改一下:
const studentInfo = [ | |
{ | |
name: "Andy", | |
age: 18, | |
isMarried: false, | |
scores: { | |
math: 90, | |
english: 85, | |
}, | |
}, | |
{ | |
name: "Bella", | |
age: 20, | |
isMarried: true, | |
scores: { | |
math: 95, | |
english: 90, | |
}, | |
} | |
]; | |
let student = document.getElementById("result1"); | |
//第一位學生(陣列元素)的姓名(屬性) | |
student.textContent += "姓名: " + studentInfo[0].name + "\t"; | |
//student.textContent = "name: " + studentInfo[0]["name"] + "\t"; | |
//第一位學生(陣列元素)的數學成績(屬性) | |
student.textContent += "數學成績: " + studentInfo[0].scores.math + "\t"; | |
//student.textContent += "數學成績: " + studentInfo[0]["scores"]["math"] + "\t"; | |
//第二位學生(陣列元素)的姓名(屬性) | |
//第二位學生(陣列元素)的數學成績(屬性) | |
// JSON 轉字串 | |
let jsonString = JSON.stringify(studentInfo); | |
let result3 = document.getElementById("result3"); | |
result3.textContent = jsonString; |
你可以觀察 studentInfo 是由「陣列」組成,包含 2 個物件 Andy 和 Bella。
其中 Andy 這個物件,擁有不同的「屬性」和「屬性值」,例如:
屬性:name
屬性值:Andy
我可以得知 Andy 是一個學生的名字,如同程式語言常見的 key-value 形式。
熟悉屬性和屬性值之後,我就來說一下,要怎麼讀取 JSON 物件的屬性值。
其實一點都不複雜,只要掌握 3 個原則,就能夠以 JavaScript 讀取:
1. 變數名稱
2. 位置 (第幾個)
3. 屬性
舉例:第一位(位置)學生(陣列元素)的姓名(屬性)
這邊有 2 種寫法
物件導向 -> studentInfo[0].name
陣列 -> studentInfo[0]["name"]
注意陣列起始索引都從 0 開始,也就是第一個陣列元素。
最後就會拿到 Andy 這個屬性值。
接下來,我們再來深入探討 scores 這個屬性,注意它是一個「物件」。
這個 scores 物件包含「math」和「english」兩個屬性,看起來有點複雜...
換個角度思考,scores 之所以要包裝成物件,就是要儲存不同科目的分數。
就跟剛才一樣,它有兩種讀取方式:
物件導向 -> studentInfo[0].scores.math
陣列 -> studentInfo[0]["scores"]["math"]
現在你可以試著用 JS 讀取「Bella」的各種資訊,我就不示範了~
除此之外,你也可以把 JSON 物件轉換成字串,將資料送至後端處理。
在 JS 裡面提供 JSON 類別的 stringify 方法,就能夠把 JSON 轉成字串。
今天就跟大家介紹到這邊,如果有問題可以在下方跟我聊~
我是 W 先生,我們下次見!
順便打個廣告:我預計在 2025 上半年舉辦我的碩士論文訪談,詳情可以參考這裡。
懶人包
延伸閱讀
參考文章
🔥 馬上追蹤本站,千萬別錯過最新文章~