調整Unmarshal 來處理不同的JSON 格式
存取外部API 時,開發人員經常會遇到不同的JSON 回應格式,這在將資料解組到一致的結構。在 Go 中,可以透過一些技術來優雅地處理這些差異。
以 API 端點為例,它以兩種格式返回 JSON 訊息,要么作為字串“訊息”,要么作為錯誤代碼數組 [ “ERROR_CODE”]。為了管理這種變化,可以定義一個自訂結構來保存回應:
<code class="go">type Response struct { Message interface{} `json:"message"` }</code>
透過將 Message 欄位設定為介面類型,Go 的動態類型系統允許儲存不同的資料類型。這種靈活性為處理不同的回應格式提供了一個起點。
要將 JSON 解組到 Response 結構中,將使用對 json.Unmarshal 的呼叫。但是,由於 Message 欄位可以保存各種類型,因此當 JSON 表示陣列(錯誤回應)時會出現特殊情況。預設情況下,JSON 陣列被解組為 []interface{} 類型的值。
處理這種差異的關鍵在於檢查解組的 Message 欄位的類型。這可以透過類型斷言或類型開關來實現,如下例所示:
<code class="go"> switch x := r.Message.(type) { case string: fmt.Println("Success, message:", x) case []interface{}: fmt.Println("Error, code:", x) default: fmt.Println("Something else:", x) }</code>
在此片段中,檢查 r.Message 的類型。如果是字串,則表示成功訊息。如果它是介面切片,則它表示帶有錯誤代碼的錯誤回應。否則,將被視為意外回應。
透過利用此技術,開發人員可以有效地將不同格式的 JSON 回應解組為統一的結構,從而能夠根據訊息類型進行後續處理和決策。
以上是在 Go 中解組時如何處理多種 JSON 格式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!