# JSON資料處理 ## 什麼是JSON? 首先,我們不妨來簡單的了解一下什麼是JSON。 - 教材鏈結: [JSON 資料概述](https://hackmd.io/D2mj64z6SBSN7LikIzoscA) 看完上述教材後,相信大家已經對JSON有了初步的了解,現在就讓我們一起看看如何用程式對JSON資料進行解析吧! * 範例程式碼下載地址:https://github.com/UnicornYumi/AnalysisJSON ## `<script>`標籤介紹 * HTML `<script>` 標籤 (tag):執行 JavaScript 程式碼 * `<script>` tag 是用來寫 JavaScript 的,你可以直接 (inline) 寫 JavaScript code 在 `<sciprt>` 裡面,或是用 `<script>` 來載入外部 JavaScript 程式檔案。 ## 解析JSON資料 1. 定義一個物件 * 在網頁資料處理的過程中,我們常常將資料從一端傳到另一端(例如,從伺服器端傳到客戶端),這時候我們就需要一些共通的格式來方便包裝資料和解讀資料。 * 現在我們就在程式中建立一個JSON格式的物件,如下範例所示: ```json= var Jas = { "resourceType": "Patient", "name": [{ "use": "official", "text": "林帶玉", "family": "林", "given": ["帶玉"] }], "gender": "female", "birthDate": "1773-01-21", }; ``` 2. 物件轉字串 JSON.stringify() :物件變JSON字串 - JSON 會儲存純文字,不算是一種 Javascript,但是 Javascipt 有內建的方法可以解析它;JSON.stringify()的方法就是可以**將任何物件轉變為 JSON 字串**。string 是字串的意思,stringify 則視為動詞字串化,將 Javascript 物件轉為 JSON 字串。 ```json= var ret = JSON.stringify(Jas); ``` 3. 顯示字串內容 * 在上一步中,我們已經將物件轉換成了字串。於是我們就可以將JSON字串的內容全部讀出來。 * 下面介紹兩種顯示的方法,大家可以根據需求或喜好選擇自己喜歡的方式: --- 網頁彈出結果 --- ```json= alert(ret); ``` 如下圖,網頁上就會跳出該彈窗,將我們上面所定義的JSON物件通過字串的方式呈現於彈窗中: ![](https://i.imgur.com/o813xvr.png) -- 網頁頁面呈現 -- 其中,document.write()是JavaScript將文字呈現於網頁上的方法。`<br>`則是換行的意思。 ```json= document.write("JSON物件內容:<br><br>") document.write(ret) ``` 如下圖,網頁上就會呈現出我們想顯示的文字以及JSON字串的內容: ![](https://i.imgur.com/qwRvIZ5.png) 4. 解析物件 * 現在,我們已經能讀到JSON物件中的全部內容了。在日常使用中,我們要的往往不是這樣一串複雜的文本,而是需要其中的資訊。 * 接下來,我們就可以將其中的資訊解析出來,讓我們在網頁上閱讀更加一目了然。 以提取姓名為範例,從字串內容中可以發現,姓名的信息在name中的text屬性裡面。範例程式碼如下: ```json= var name = Jas.name[0].text; document.write("<br>Name: ", name) ``` 執行程式碼後,在網頁上就可以很清楚的看到姓名被我們提取出來了。 ![](https://i.imgur.com/NsNEcBQ.png) 同理,模仿上述範例,大家可以試看看把物件中所有的資訊一一解析出來,在網頁中顯示如下結果: ![](https://i.imgur.com/XEbUx2t.png) 5. 修改物件資訊 若我們想要修改物件中的某個值,可以使用以下方法: ```json= document.write("<br><br><br>--修改物件值--<br>") Jas.birthDate = "2000-01-01"; var ret2 = JSON.stringify(Jas) document.write("修改後JSON物件內容:<br>") document.write(ret2) ``` 將BirthDate改為2000-01-01,此時,將更改後的JSON物件重新定義並轉換字串。當我們再次將物件內容呈現出來時,就可以看到資料已經進行更改了。 ![](https://i.imgur.com/0A0CXp7.png) ## 延伸:字串轉JSON物件 JSON.parse() :JSON字串變物件 * 我們在前面有物件變JSON字串的方法,這裡延伸介紹JSON.parse()這個函式,它可以幫助我們將字串轉成物件。 * 我們使用上述程式中傳出來的字串文本做一個宣告,將字串轉換成物件後,可以提取出字串中的firstName和lastName組合出一個完整的名字。 ```json= <html> <head></head> <body> <h3>I want to get your Name:</h3> <h3 id="demo"></h3> <script> // 定義一個 JSON 物件 let text = '{"resourceType":"Patient","name":[{"use":"official","text":"林帶玉","family":"林","given":["帶玉"]}],"gender":"female","birthDate":"1773-01-21"}'; const obj = JSON.parse(text);// 字串轉物件 document.getElementById("demo").innerHTML = obj.name[0].family + " " + obj.name[0].given[0]; // 顯示於網頁中 </script> </body> </html> ```