---
# System prepended metadata

title: 物件導向語言筆記--JSON
tags: [json, 資料交換格式, 筆記, JSON, 字典, Python, 物件導向]

---

<h1>物件導向語言筆記--JSON</h1>

>[!Note]參考: [Python筆記–字典(Dictionary,dict)](https://hackmd.io/@9YAtszqXS2OLNZOrLY_-Jg/python_dictionary)

JSON（JavaScript Object Notation）是一種輕量級的資料交換格式，常用於網路通訊（例如 API 傳輸）。它以人類可讀的純文字表示結構化資料，並且跨語言、跨平台，容易解析與生成。

<b><u>JSON 與 Python Dictionary 的關係</u></b>:
- JSON 的結構與 Python 的 dict 非常相似
- 兩者皆以<b>鍵值對（key–value）</b>表示資料

<b><u>因此</u></b>：
- JSON → Python：可解析成 dict 來存取與操作
- Python dict → JSON：可序列化後用於傳輸或儲存

<b><u>需要特別注意的差異</u></b>: 
- JSON 是種資料格式，不是語言
- Python 的 dict 是語言內部的資料結構


---
JSON 的基本結構
---
JSON的語法簡潔明瞭，基本結構由兩種主要的資料結構組成：

1. JSON物件（JSON Object）：
- 使用大括號 <code>{ }</code> 包裹，表示一個物件，內部包含一系列由鍵（key）和值（value）組成的鍵值對，適合表示「名稱 → 值」的對應關係。
- 鍵是唯一的，必須是字串，且在同一物件中唯一，但物件底下的物件可以重複使用同一個鍵名。[[參見](#JSON的巢狀結構)]
- 值可以是字串、數字、布林值、物件、陣列或是null
```json=
{
  "name": "PU",
  "age": 30,
  "isDeveloper": true
}
```  

2. JSON陣列（JSON Array）： 
- 使用中括號 <code>[ ]</code> 包裹，表是一個陣列，內部包含一系列值，適合描述「一組同類型的資料」的關係。
- 值是有順序的，並以索引（index）存取
- 每個值可以是字串、數字、布林值、物件、陣列或是null
```json=
[
  "Kotlin",
  "Java",
  "Python"
]
```
---
JSON的巢狀結構
---
巢狀（Nested）指的是在 JSON 的物件或陣列裡，再放物件或陣列，也就是「資料裡面還包含資料」，可以多層結構組合
- 描述複雜、分層的資料
- 巢狀可讓資料更有結構，避免所有欄位擠在同一層

<b><u>範例</u></b>:
```json=
{
  "users": [
    {
      "name": "PU",
      "skills": ["Kotlin", "Python"]
    },
    {
      "name": "Alice",
      "skills": ["Java", "C++"]
    }
  ]
}
```
<b><u>這個巢狀 Json 相當於</u></b>: 
```pgsql=
root (Object)
└─ users (Array)
   ├─ [0] (Object)
   │   ├─ name: "PU"
   │   └─ skills (Array)
   │       ├─ [0]: "Kotlin"
   │       └─ [1]: "Python"
   └─ [1] (Object)
       ├─ name: "Alice"
       └─ skills (Array)
           ├─ [0]: "Java"
           └─ [1]: "C++"
```



---
JSON 和 Python 字典相似之處
---
- 都使用花括號 <code>{ }</code> 包裹，表示一個物件（object）或字典（dictionary）。
- 鍵（key）和值（value）以冒號 : 分隔，表示屬性和對應的值。
- 鍵必須是唯一的，而值可以是任意型別的資料，包括字串、數字、布林值、陣列、其他物件等。
