在 Go 中处理部分 JSON 解码和更新
如果 JSON 对象的结构是动态的,传统的 JSON 解组可能会导致由于字段截断而导致数据丢失。为了解决这个问题,请考虑将常规结构与 json.RawMessage 相结合的解决方案,它允许选择性更新,同时保留未知信息。
Color 结构说明了这种方法:
type Color struct { Space string raw map[string]json.RawMessage }
在 JSON 期间解组时,UnmarshalJSON 方法将整个数据读取到原始数据中,并从原始数据中检索所需的字段(例如,空格)(如果满足)存在:
func (c *Color) UnmarshalJSON(bytes []byte) error { if err := json.Unmarshal(bytes, &c.raw); err != nil { return err } // ... return nil }
对于 JSON 编组,MarshalJSON 方法将所需字段放回原始格式,确保更新的字段包含在输出中:
func (c *Color) MarshalJSON() ([]byte, error) { // ... return json.Marshal(c.raw) }
此方法允许选择性字段更新,同时保留其余 JSON 数据,包括未知或动态结构。
以上是Go 如何高效处理部分 JSON 解码和更新?的详细内容。更多信息请关注PHP中文网其他相关文章!