# 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 資料。