ホームページ >バックエンド開発 >Golang >Go は部分的な JSON デコードと更新を効率的に処理するにはどうすればよいでしょうか?

Go は部分的な JSON デコードと更新を効率的に処理するにはどうすればよいでしょうか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-27 09:06:14510ブラウズ

How Can Go Handle Partial JSON Decoding and Updates Efficiently?

Go での部分的な JSON デコードと更新の処理

JSON オブジェクトの構造が動的である場合、従来の JSON アンマーシャリングでは次のような問題が発生する可能性があります。フィールドの切り捨てによるデータ損失。これに対処するには、通常の構造体と json.RawMessage を組み合わせたソリューションを検討してください。これにより、未知の情報を保持しながら選択的な更新が可能になります。

Color 構造体は、このアプローチを示しています。

type Color struct {
    Space string
    raw   map[string]json.RawMessage
}

During JSONアンマーシャリングでは、UnmarshalJSON メソッドはデータ全体を raw に読み取り、必要なフィールド (スペースなど) を raw から取得します。存在します:

func (c *Color) UnmarshalJSON(bytes []byte) error {
    if err := json.Unmarshal(bytes, &c.raw); err != nil {
        return err
    }
    // ...
    return nil
}

JSON マーシャリングの場合、MarshalJSON メソッドは目的のフィールドを raw に戻し、更新されたフィールドが出力に確実に含まれるようにします:

func (c *Color) MarshalJSON() ([]byte, error) {
    // ...
    return json.Marshal(c.raw)
}

このアプローチでは、次のことが可能になります。不明な構造や動的構造を含む残りの JSON データを保持しながら、選択フィールドを更新します。

以上がGo は部分的な JSON デコードと更新を効率的に処理するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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