ホームページ > バックエンド開発 > Golang > Golang で動的入れ子構造を持つ JSON をデコードするにはどうすればよいですか?

Golang で動的入れ子構造を持つ JSON をデコードするにはどうすればよいですか?

DDD
リリース: 2024-11-17 08:46:03
オリジナル
532 人が閲覧しました

How to Decode JSON with Dynamic Nested Structures in Golang?

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"`
}
ログイン後にコピー

マップの使用

SMS オブジェクト以来JSON には動的なキーがあり、電話番号をキーとして、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)
ログイン後にコピー

これは次のようになります。動的電話番号を結果のキーとして持つ、適切に逆シリアル化されたオブジェクト内。Sms map.

関連質問

  • Golang で動的 JSON を解析/逆シリアル化する方法
  • 未知のフィールド名を持つ JSON を構造体にアンマーシャルする方法golang で?
  • 不明な JSON をアンマーシャルしますフィールド
  • JSON 文字列を構造体自体の 1 つの要素を持つ構造体にアンマーシャルします

以上がGolang で動的入れ子構造を持つ JSON をデコードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート