Joe*_*haw 9 encoding json decoding go lossless
我想将JSON blob解码为Go结构,对其进行操作,然后将其编码回JSON.但是,JSON中的动态字段与我的struct无关,我想在序列化回JSON时维护它们.
例如:
{ "name": "Joe Smith",
"age": 42,
"phone": "614-555-1212",
"debug": True,
"codeword": "wolf" }
type Person struct {
Name string
Age uint
Phone string
}
var p Person
json.Unmarshal(data, &p)
// Happy birthday
p.Age++
data, _ = json.Marshal(p)
// Any way to maintain the "debug" and "codeword" fields -- which might not
// be known ahead of time?
Run Code Online (Sandbox Code Playgroud)
我知道有一种可能性就是将所有东西都解码成一个map[string]interface{}男孩,当你这样做时,事情变得丑陋.
有没有办法让两全其美?
由于encoding/json没有办法解码结构并在同一级别保存未知字段以进行后重新编码.你可以做的是选择不使用json.RawMessage类型解码部分结构,类似于:
type Person struct {
Name string
Address json.RawMessage
}
Run Code Online (Sandbox Code Playgroud)
您可以通过实现自己的Unmarshaler解决方法,将文档解码为地图并将未知密钥保存在结构的字段中,然后让对应的Marshaler在编组之前将字段放回.
出于好奇,您正在寻找的功能确实存在于labix.org/v2/mgo/bson中,通过内联标记标记,目标是精确地解决您正在描述的用例.