首頁 > 後端開發 > Golang > 如何使用變數類型解組 JSON 資料:字串或字串陣列?

如何使用變數類型解組 JSON 資料:字串或字串陣列?

Linda Hamilton
發布: 2024-10-29 02:58:02
原創
504 人瀏覽過

How to Unmarshal JSON Data with Variable Types: String or Array of Strings?

使用變體結構解碼JSON

您正在使用的端點以不同格式返回JSON,有時作為字串,有時作為字串大批。為了解決這種不一致問題,以下問題探討了設計可容納這兩種類型的 Go 結構體的最佳方法。

問題:

如何建立一個 Go可以用變數類型(字串或字串陣列)解組 JSON 資料的結構體?除了嘗試解碼為兩個單獨的結構之外,是否有一個優雅的解決方案?

答案:

更複雜的方法是將 JSON 解組為 interface{} 型。這種與類型無關的方法允許動態處理不同的值類型。

要實現此技術,請建立一個具有interface{} 類型欄位的結構體,如以下範例所示:

<code class="go">type Response struct {
    Message interface{} `json:"message"`
}</code>
登入後複製

將JSON 資料解組到此結構時,可以使用類型開關或類型斷言來確定Message 欄位的實際類型。這使您可以相應地處理數據。

這是一個範例實作:

<code class="go">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>
登入後複製

輸出:

Success, message: Message
Error, code: [ERROR_CODE]
登入後複製

透過使用interface{}方法,您可以獲得靈活處理不同類型的JSON 數據,簡化您的程式碼庫。

以上是如何使用變數類型解組 JSON 資料:字串或字串陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板