Golang Unmarshal Json不解析所有的子结构



我有一个父结构和两个子结构ResponseA和ResponseB。我写了"unmarshaljson";函数用于ParentA结构。parentB结构和string字段没有解析。如何编写只解析指定结构的自定义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

我测试了一下,我认为这是一个结构问题,我不知道你是否可以改变你的json结构,但如果可以的话你可以尝试只使用两个结构,有一个进化的结构

type Response struct {
Page    int      `json:"page"`
Entries []string `json:"entries"`}
}
type GlobalResponse struct {
ResponseA Response `json:"pageA"`
ResponseB Response `json:"pageB"`
ResponseC Response `json:"pageC"`
}

然后这样访问:

var res *GlobalResponse
json.Unmarshal([]byte(jsonStr), &res)
entriesA := res.ResponseA.Entries
pageA := res.ResponseA.Page
// Etc for each page...

最后,json必须更改为结构

{
"pageA":{
"page":1,
"entries":[
"classA"
]
},
"pageB":{
"page":2,
"entries":[
"classC",
"classD"
]
},
"pageC":{
"page":3
}
}

希望有帮助

最新更新