ホームページ > バックエンド開発 > Golang > Go で動的配列構造を使用して JSON を効率的にアンマーシャリングする方法

Go で動的配列構造を使用して JSON を効率的にアンマーシャリングする方法

Linda Hamilton
リリース: 2024-12-21 14:43:11
オリジナル
634 人が閲覧しました

How to Efficiently Unmarshal JSON with Dynamic Array Structures in Go?

動的配列構造を使用した JSON のアンマーシャリング

サードパーティのソースから JSON データを取得する場合、データ構造は異なる場合があり、配列や配列が含まれる場合もあります。そうでない場合もあります。 Go の json.Unmarshal 関数を使用する場合、特定の構造体が JSON 構造に一致することが期待されるため、これにより問題が発生する可能性があります。

これを処理する一般的なアプローチは、次のようなスライスを含む 2 番目の構造体を作成することです。

type ResponseWithSlice struct {
    Gwrcmds struct {
        Gwrcmd []struct { // Nested struct now a slice
            Gcmd  string
            Gdata struct {
                Gip struct {
                    Version string
                }
            }
        }
    }
}
ログイン後にコピー

これは機能しますが、構造体の複製が必要になるため、面倒になる可能性があります。

詳細汎用性の高い解決策には、json.RawMessage の使用が含まれます:

type Response struct {
    RawGwrcmd json.RawMessage `json:"gwrcmds"`
}
ログイン後にコピー

このアプローチでは、gwrcmds フィールドが生の JSON メッセージとして保存され、それを覗いて、それに応じてアンマーシャリングできるようになります:

func (r *Response) UnmarshalJSON(b []byte) error {
    if err := json.Unmarshal(b, &r.RawGwrcmd); err != nil {
        return err
    }
    if r.RawGwrcmd[0] == '[' { // Check if it's an array
        return json.Unmarshal(r.RawGwrcmd, &r.Gwrcmds.Gwrcmd)
    }
    return json.Unmarshal(r.RawGwrcmd, &r.Gwrcmds.Gwrcmd) // Otherwise, treat it as a single struct
}
ログイン後にコピー

このメソッドを使用すると、追加の構造体を必要とせずに、配列構造と非配列構造の両方を処理できます。

以上がGo で動的配列構造を使用して JSON を効率的にアンマーシャリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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