ホームページ >バックエンド開発 >Golang >Go の入れ子構造で動的名を持つ JSON を逆シリアル化する方法は?

Go の入れ子構造で動的名を持つ JSON を逆シリアル化する方法は?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-22 21:24:15928ブラウズ

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
}

struct:

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"`
}

この問題は、「SMS」内のプロパティ名として動的な電話番号が原因で発生します。 object.

解決策

この状況に対処するには、マップを利用して 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。