首頁  >  文章  >  後端開發  >  如何在 Go 中使用巢狀結構中的動態名稱反序列化 JSON?

如何在 Go 中使用巢狀結構中的動態名稱反序列化 JSON?

Susan Sarandon
Susan Sarandon原創
2024-11-22 21:24:15912瀏覽

How to Deserialize JSON with Dynamic Names in Nested Structures in Go?

使用Go 解碼JSON 中的巢狀動態結構

本文解決了反序列化在巢狀結構中具有動態名稱的JSON數據的挑戰。讓我們檢查問題並提供解決方案。

問題陳述

考慮以下 JSON 回應:

{
    "status": "OK",
    "status_code": 100,
    "sms": {
        "79607891234": {
            "status": "ERROR",
            "status_code": 203,
            "status_text": "Нет текста сообщения"
        },
        "79035671233": {
            "status": "ERROR",
            "status_code": 203,
            "status_text": "Нет текста сообщения"
        },
        "79105432212": {
            "status": "ERROR",
            "status_code": 203,
            "status_text": "Нет текста сообщения"
        }
    },
    "balance": 2676.18
}

結構:

type SMSPhone struct {
    Status     string `json:"status"`
    StatusCode int    `json:"status_code"`
    StatusText string `json:"status_text"`
}

type SMSSendJSON struct {
    Status     string     `json:"status"`
    StatusCode int        `json:"status_code"`
    Sms        []SMSPhone `json:"sms"`
    Balance    float64    `json:"balance"`
}

出現此問題的原因是動態電話號碼作為「簡訊」中的屬性名稱

解決方案

為了處理這種情況,我們可以使用映射來表示JSON中的「sms」物件:

type SMSPhone struct {
    Status     string `json:"status"`
    StatusCode int    `json:"status_code"`
    StatusText string `json:"status_text"`
}

type SMSSendJSON struct {
    Status     string              `json:"status"`
    StatusCode int                 `json:"status_code"`
    Sms        map[string]SMSPhone `json:"sms"`
    Balance    float64             `json:"balance"`
}

現在,反序列化程式碼如下所示:

var result SMSSendJSON

if err := json.Unmarshal([]byte(src), &result); err != nil {
    panic(err)
}

這種方法允許我們正確處理嵌套Go 中的動態結構。

以上是如何在 Go 中使用巢狀結構中的動態名稱反序列化 JSON?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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