在Go 中透過解組處理多種JSON 格式
當使用以不同格式傳回JSON 的第三方API 時,這可能具有挑戰性處理Go 中不同的結構。一個常見的挑戰是處理「訊息」欄位中可以包含字串或陣列的回應。
一種簡單的方法
一種基本方法涉及創建每種格式都有單獨的結構:
<code class="go">type ResponseWithString struct { Message string `json:"message"` } type ResponseWithArray struct { Message []string `json:"message"` }</code>
然後,您可以嘗試將JSON 連續解碼為兩種結構。如果第一次嘗試(使用字串)失敗,您將嘗試第二次嘗試(使用陣列)。
更優雅的解決方案
更優雅的方法是使用interface{} 類型,可以保存任何類型的值。透過將 JSON 反編組為 interface{} 類型的變量,您可以動態檢查其類型並做出對應回應。
<code class="go">type Response struct { Message interface{} `json:"message"` } func main() { ... var r Response ... switch x := r.Message.(type) { case string: // Handle string message case []interface{}: // Handle array message } }</code>
請注意,預設情況下,JSON 陣列被反編組為 []interface{},因此您可以使用類型斷言來區分字串和陣列。
這種方法提供了更大的靈活性和程式碼可重複使用性,因為您可以使用單一結構處理多種 JSON 格式。
以上是解組時如何在 Go 中處理多種 JSON 格式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!