首頁 >後端開發 >Golang >如何優雅地處理不同格式的 JSON 回應?

如何優雅地處理不同格式的 JSON 回應?

Barbara Streisand
Barbara Streisand原創
2024-10-27 10:42:03820瀏覽

How to Elegantly Handle JSON Responses with Varying Formats?

探索處理不同格式的JSON 回應的方法

在使用的端點以不同格式返回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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn