[網路應用] JSON 文字處理- 將 Data(Dictionary , Array) 轉換成 JSON String 格式

資策會 APP Developer 行動開發工程師養成班

陳冠名|Michelle Chen Chen
Adream4ever
5 min readJan 1, 2022

--

▍JSON 文字處理簡介

JSON 是一種回傳資料的形式,全名 JavaScript Object Notation
常被應用於 web 開發,甚至比 XML 的資料格式還要常被拿來應用
目前 Google, Facebook, Twitter, Dropbox 都利用 JSON 作為 API 資料交換的格式

▍JSON 資料格式

  1. 字串:以 “ “ 括起來的表示文字
  2. 數值:ㄧ系列 0–9 的數字組合,可以為負數或是小數,不會有 “ “
  3. 布林值:表示為 true 或者 false,不會有 “ “
  4. null:表示某ㄧ個值為空值,寫法:NSNull()
  5. {}:以 Key:Value 組成的資料格式,經過轉換會成為 Dictionary
    接近 Objective-C 用法
  6. []:表示為矩陣的資料格式,轉換成為 Array
    接近 Swift 用法,[] 可能是 Array 或者 Dictionary,看有沒有冒號:

▍JSONSerialization Class 轉換

將 Data(Dictionary , Array) 轉換成 JSON 格式的 String

Data 方法內會有 Dictionary 或者 Array,產生 Data 格式後,再轉換成 String
Option 內會有 prettyPrinted,指定 prettyPrinted 會產生換行、空格,在 debug 時比較好閱讀,但空間較為浪費。

▍練習:將 Dictionary 資料透過 JSONSerialization.data 轉成 Data,把資料傳給對方的伺服器

規格:利用 Dictionary 及 Array 產生同樣規格的 JSON String,JSON String 要有 Key & Value,address 內有資料

在 ViewController 內的 viewDidLoad 做測試

Dictionary 內是沒有順序的,只有 key & value

舉例上圖的 office, home:
Array 內會按照順序顯示結果
Array 內的 Dictionary:type, number ,就不會照著順序顯示結果

也有些程式語言的 Dictionary 是可以按照順序顯示的~

如果不給 Option [.prettyPrinted],就會印出一行文字,去除換行機制
有[.prettyPrinted],比較容易得知結構樣貌

▍JSON 轉換的錯誤處理 — 1

方式ㄧ:建議ㄧ定要使用 do-catch,印出 error 才知道錯誤出在哪裡

方式二:try 不使用 do-catch,可以加上?變成 optional

try? 變成 optional

改寫 try -> try?
String(data: data) 是不允許使用 optional,要將 let 改成 If let

String(data: data) 是不允許使用 optional,要將 let 改成 If let

不建議使用方法二,因為轉成 JSON 若發生失敗時,會需要明確知道為何失敗,不知道失敗在哪裡,就不知道該如何處理?

當發生問題時,if let 後方的 data 就會變成空值,造成沒辦法除錯處理問題

方式三:try 不使用 do-catch,可以加上!保證不會有錯誤!

try! 保證不會有錯誤

當程式碼加上!,是程式設計師保證不會出錯;但如果有錯誤發生,程式碼會直接當掉…

▍JSON 轉換的錯誤處理 — 2

Q:當 server 伺服器的格式改變怎麼辦?

根據文字最後結果反推程式應該如何撰寫;若對方伺服器做修改時,可能會影響自己撰寫的程式運作,因此發生邏輯規則不符合,需要修改程式碼的情況,造成程式處於不穩定的情況;因此不能假設程式只需要寫一次之後就不需要再做調整。

Q:先前取得經緯度座標的練習都是用 as? 來轉型,為何不用 as! 來轉型?

用 as? 處理,若對方傳進來的資料不是自己能夠正確轉型的,程式碼就會跳過不執行,代表 if let 不執行,不會造成程式碼當機。

若用 as! 處理,若對方傳進來的資料ㄧ但找不到時,就會造成程式碼當機!

as? 轉型,為何不用 !

▍JSON 資料優缺點

優點:容易閱讀、理解
缺點:資料結構鬆散,不是嚴謹的結構,無法事先預測會傳送什麼資料進來,若資料變更,自己不ㄧ定會知道。

處理 JSON 格式ㄧ定要特別小心,無法保證第二次傳送資料進入的時候,是否跟第ㄧ次相同,因此都選擇用 optional 的方式處理資料。

--

--

陳冠名|Michelle Chen Chen
Adream4ever

Brave Together App 產品負責人,現職物聯網科技領域的 iOS Developer,歡迎交流~!