首頁 > 後端開發 > Golang > 主體

如何在 Golang 中使用動態巢狀結構解碼 JSON?

DDD
發布: 2024-11-17 08:46:03
原創
465 人瀏覽過

How to Decode JSON with Dynamic Nested Structures in Golang?

JSON 巢狀動態結構Go 解碼

在處理巢狀結構中包含動態或未知欄位名稱的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物件具有動態鍵,因此可以使用以電話號碼為鍵、以 SMSPhone結構體為值的映射對其進行建模:

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)
}
fmt.Printf("%+v", result)
登入後複製

這將產生一個正確反序列化的對象,其中動態電話號碼作為鍵result.Sms map。

相關問題

  • 如何在Golang 中解析/反序列化動態JSON
  • 如何用未知的方式解組JSON golang 中要建構的字段名?
  • 解組具有未知欄位的 JSON
  • 將 json 字串解組為具有結構本身一個元素的結構

以上是如何在 Golang 中使用動態巢狀結構解碼 JSON?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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