我有一个父结构和两个子结构ResponseA和ResponseB。我为ParentA结构写了“UnmarshalJson”函数。parentB结构和字符串字段都没有解析。我怎么写自定义Unmarshal只解析指定的结构/
type ResponseA struct {
PageA int `json:"pageA"`
EntriesA []string `json:"entriesA"`
}
type ResponseB struct {
PageB int `json:"pageB"`
EntriesB []string `json:"entriesB"`
}
type ResponseParent struct {
ResponseA
ResponseB
PageC int `json:"pageC"`
}
func (r *ResponseA) UnmarshalJSON(data []byte) error {
// UnMarshal ResponseA structure
}
func main() {
jsonStr := `{"pageA": 1, "entriesA": ["classA"], "pageB": 2, "entriesB":
["classC","classD"], "pageC":3}`
// str := `{"page": 1, "entries": ["classA", "classB"]}`
var res *ResponseParent
json.Unmarshal([]byte(jsonStr), &res)
entriesA := res.EntriesA
pageA := res.PageA
entriesB := res.EntriesB
pageB := res.PageB
pageC := res.PageC
fmt.Println("========Response A==========a")
fmt.Println("PageA: %v", pageA)
fmt.Println("EntriesA: %v", entriesA)
fmt.Println("========Response B==========a")
fmt.Println("PageB: %v", pageB)
fmt.Println("EntriesB: %v", entriesB)
fmt.Println("PageC: %v", pageC)
}
OutPut:
========Response A==========a
PageA: %v 1
EntriesA: %v [classA]
========Response B==========a
PageB: %v 0
EntriesB: %v []
PageC: %v 0
1条答案
按热度按时间1l5u6lss1#
我测试了它,我认为这是一个结构问题,我不知道你是否可以改变你的json结构,但如果是的,你可以尝试只使用2个结构,有一个进化的结构
然后以这种方式访问:
最后,必须将JSON更改为该结构
希望有帮助