我只需要解码和更新json对象的特定值。问题是我不知道对象的完整结构。encoding / json包“忽略” /截断了结构中未提供的字段,因此对这些字段进行编码会丢失。我想知道是否有可能仅解组我知道的结构,对其进行更新,然后再进行组封而不截断/删除未知的结构/信息。
似乎有可能。
package main import ( "encoding/json" "fmt" "log" ) func main() { type Color struct { Space string Point json.RawMessage // delay parsing until we know the color space } type RGB struct { R uint8 G uint8 B uint8 } type YCbCr struct { Y uint8 Cb int8 Cr int8 } var j = []byte(` {"Space": "YCbCr", "Point": {"Y": 255, "Cb": 0, "Cr": -10}}`) var colors Color err := json.Unmarshal(j, &colors) if err != nil { log.Fatalln("error:", err) } colors.Space = "no-space" b, err := json.Marshal(&colors) if err != nil { panic(err) } fmt.Printf("b is now %s", b) return }