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 サイトの他の関連記事を参照してください。