如果结构体B是结构体A的子集,可以通过定义一个与结构体A相同的结构体C,并使用json标签来指定要包含的字段,然后将结构体B转换为结构体C,再将结构体C转换为结构体A。
例如,假设我们有如下的结构体A和结构体B:
type A struct {
Foo string `json:"foo"`
Bar int `json:"bar"`
}
type B struct {
Foo string `json:"foo"`
}
可以定义一个与结构体A相同的结构体C,只包含结构体B中的字段:
type C struct {
Foo string `json:"foo"`
}
然后可以使用json.Unmarshal将结构体B转换为结构体C:
b := B{Foo: "hello"}
var c C
data, _ := json.Marshal(b)
json.Unmarshal(data, &c)
最后,可以将结构体C转换为结构体A:
a := A{
Foo: c.Foo,
Bar: 0, // 设置默认值
}
或者直接将结构体B转换为结构体A:
b := B{Foo: "hello"}
a := A{
Foo: b.Foo,
Bar: 0, // 设置默认值
}