---
# System prepended metadata

title: JSON introduction

---

# JSON introduction 
- JSON 是一種簡單易懂的資料結構。JSON 結構化資料利於資料儲存及互通交換。
- JSON 資料人跟電腦都可很容易讀取、了解、編輯、處理。
- JSON 是 JavaScript Object Notation 的縮寫。這是資工專家訂出來，資工人專長在電腦，但又要讓人覺得很厲害，因此訂出許多讓人覺得很酷(莫名其妙)的術語。簡單而言， **JSON 是  key-value pair 與Array(陣列) 這兩種基礎結構組合而成的資料**。
- Key value pair: 成對的大括號{} 可包含多個 key/value 組合。 key value 以冒號隔開 ':'。以逗號  ',' 區隔下一組資料。如下範例:
```json=
{"itemName":"Product1", "Amount": 3 }
```
- Array: 陣列當中通常包含多組同屬性的資料。如下範例:
```json=
 [{"itemName":"product1", "Amount": 3 },
  {"itemName":"product2", "Amount": 1 }]
```
如上範例，中括號 [] 陣列當中包含兩組大括號 {} 包含的 key-value pairs，陣列當中每一筆資料以逗號 (,)分隔。
- Key-value pair 與陣列組合成 JSON 資料，以此描述一組意義明確的資料，如下範例:
```json=
{  "buyerName": "John",
   "orderDate": "2022-06-24", 
   "orderItems": [{"itemName":"Product1", "Amount": 3 },
                  {"itemName":"Product2", "Amount": 1 }]
}
```
上述 JSON 範例大括號{}第一層包含 buyerName, orderDate, orderItems 三組 key-value pair。buyerName, orderDate 的 value 是字串。而  orderItems 的 value 是陣列，此陣列每一筆資料又是一組 {} 包含的 key-value pairs。上述 JSON 範例可描述一筆訂單，清楚指定訂購者 (buyerName)，訂購日期(orderDate)、訂購的商品與數量(orderItems)。
##  定義 JSON 資訊處理模板
- JSON 資料結構人跟電腦都可很容易讀取、了解、編輯、處理。如上範例，可用來描述一份訂單，以利程式處理。 
- **在許多應用領域，僅需求者熟悉處理流程及要處理的資訊(程式開發人員不清楚)**。 需求者可用 JSON 描述其專業領域要處理的資訊，以利資訊人員依循開發系統。如下範例:
```json=

{   "dataType": "Order",
    "id": "orderID267",
    "status": "requested",
    "buyer": {"id":"A001", "name":"John" },
    "orderDate": "2022-06-24", 
    "orderItems": [{"itemName":"product1", "ProductID" :"p123", "price":100, "Amount": 3 },
                   {"itemName":"product2", "ProductID" :"p333", "price":500, "Amount": 1 }]
}

```
上述範例可用於電子商務。買家選購後，可產生上述訂單資料。此 JSON 資料各欄位規格及用途進一步說明:
- datatype: 指定此 JSON 的類型， "Order" 代表訂單。另可能有其他 datatype，如買家、商家、商品、付款等
- id:  指定此筆訂單的唯一碼，以利程式處理。 其他類型的 JSON 資料，如許多買家、貨品、商家、付款紀錄等，通常也會有多筆資料，因此每組 JSON 資料應給與一唯一碼。
- status: 表示此訂單的處理狀態，可能包含買家下訂單、商家處理中、已出貨、已付款、撤銷、異常等狀態
- orderDate: 買家下訂單時間。可能還需增加其他時間記錄欄位，如出貨時間、到貨時間等
- buyer: 買家資料，內含id, name 以利識別。可由另一 JSON data 描述此 buyer 進一步的資料，如住址、聯絡資訊、註冊日期等。此訂單當中僅紀錄 Buyer 的 id，若需要可由此 id 查到 buyer 的詳細資料。
- orderItems: 條列訂單項目(陣列)。每個項目包含:
-- itemName : 商品名稱
-- ProductID : 商品 id
-- Amount: 購買數量


## JS read JSON data
- JS 解析 JSON 資料範例
```htmlembedded=
<html>
<head> </head>
<body></body>
<script>
  // 定義一個 JSON 物件
  var Jas = {
    "resourceType": "Patient",
    "name": [{
      "use": "official",
      "text": "林帶玉",
      "family": "林",
      "given": ["帶玉"]
    }],
    "gender": "female",
    "birthDate": "1773-01-21",
  };
  // 將 Jas 物件 birthDate 資料指定給 ret 變數
  var ret = Jas.birthDate;
  alert(ret); // 網頁彈出顯示 ret 結果
</script>
</html>
```
- 上述範例用到 JavaScript 程式基礎語法； JS var 設定變數與物件，JS alert 在提示視窗呈現資訊，以及 [JS 處理 JSON 物件](https://www.w3schools.com/js/js_json.asp)。有人可協助準備十分鐘 JS 快速上手線上教材嗎? 
### 執行 JSON.html 程式範例
- 在 VS code 開發環境，可選擇 r_JSON.html，按滑鼠右鍵，點選 open with live 執行範例程式
![](https://i.imgur.com/3WhqzRH.png)
- 執行後，在瀏覽器會看到如下結果:
![](https://i.imgur.com/d6erHir.png)

### Pratice 
- 若要使用 JS 從上述範例取得 "family" 標籤的資料("林")，範例程式第 18 行要如何修改? 
## JS set JSON data
- JS 在 JSON 模板中設定資料範例
- 執行 w_JSON.html 範例程式
![](https://i.imgur.com/xhboZHy.png)
- 瀏覽器會看到的結果如下:
![](https://i.imgur.com/hRzWZuv.png)
### Pratice 
- 若要將"林帶玉"改為"林黛玉"，"帶玉"改為"黛玉"，範例程式要如何修改
## JSON 在健康醫療的應用
- 類似上述概念，國際標準 FHIR 在健康醫療領域定義許多Rresurces，以利臨床醫療資料交換及醫資系統整合應用
- 其中 FHIR Observation(客觀觀察或檢查)、Condition(病人問題狀況)、 Questionnaire and QuestionnaireResponse(問卷表單) 用途廣泛，**但在許多健康醫療情境尚未確立其規格及範例，很需要積極去進行**。如附範例連結[ useful clinical FHIR resources](https://hackmd.io/bWEZu4J1STS7yA18H6yvUw?view#Widely-used-clinical-FHIR-resources) 


## 編輯 JSON 資料
- JSON 是結構化的文字資料，可用許多文書編輯軟體來編輯，如 VS code
-- [VS code dowoload and install](https://code.visualstudio.com/download)、 VS code 產生及編輯 JSON 資料(加入簡單說明文件)
-- https://code.visualstudio.com/learn/get-started/basics

## 定義  JSON 資訊處理模板的好處
- 利於產生完善易懂的規格文件
-- **JSON 資料規格**搭配系統介面功能、作業流程等說明可產生需求者、開發者、使用者皆易於了解的規格文件
- 利於資料互通及整合應用；可跨系統支援相同的資料規格。
- 利於調整修改。有可能僅需調整 JSON 資料，即可修改或擴充系統，不須改程式。

## JSON VS CSV 檔
- 樹狀的 JSON 結構可用來定義種類的資料(如臨床醫療個領域產生的資料)，並利於程式產生及處理對應的 JSON 資料。
