【筆記】網頁開發的常見名詞:JSON

 前言 

這次要來聊網頁開發當中常見的名詞: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;
view raw json.js hosted with ❤ by GitHub

 

你可以觀察 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 上半年舉辦我的碩士論文訪談,詳情可以參考這裡

 

 懶人包 

所有文章 / 網頁開發 / 前端

 

 延伸閱讀 

RESTful API-定義網頁網址的救星

 

 參考文章 

使用 JSON 資料 - 學習 Web 開發 | MDN

 

🔥 馬上追蹤本站,千萬別錯過最新文章

🔔 關於本站 / 快速導覽

🔔 Facebook

🔔 Instagram

Mr.W 電腦村莊_FB封面照.png

arrow
arrow
    創作者介紹
    創作者 Mr. W 的頭像
    Mr. W

    Mr. W 電腦村莊

    Mr. W 發表在 痞客邦 留言(0) 人氣()