在使用的端點以不同格式返回JSON 的情況下,找到一種優雅的方法來處理這些變化至關重要。這種困境的出現是由於端點的不可變性質。
常見的策略包括使用多個結構進行解碼,嘗試解碼為需要字串的結構,並在遇到錯誤時切換到帶有數組的備用結構。雖然此方法實現了所需的功能,但可能還有更精細的方法。
建議的解法是將 JSON 解組為 interface{} 值。然後可以使用類型斷言或類型開關檢查該值以確定其實際類型。
Go 中的範例示範了此方法的有效性:
<code class="go">type Response struct { Message interface{} `json:"message"` } func main() { inputs := []string{ `{"message":"Message"}`, `{"message":["ERROR_CODE"]}`, } for _, input := range inputs { var r Response if err := json.Unmarshal([]byte(input), &r); err != nil { panic(err) } 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>
輸出顯示了成功的處理JSON 回應格式的差異:
Success, message: Message Error, code: [ERROR_CODE]
透過利用這種方法,您可以輕鬆處理不同的JSON 格式,無需使用多個結構或錯誤處理。
以上是如何優雅地處理不同格式的 JSON 回應?的詳細內容。更多資訊請關注PHP中文網其他相關文章!