Golang json.Unmarshal解析vCenter REST API响应异常问题排查
问题原因与解决方案
你遇到的字段反序列化失败问题,核心原因是结构体的JSON标签语法错误——在json:和双引号之间多了一个空格!
Go语言对结构体字段的标签格式要求非常严格:必须写成json:"字段名"的形式,冒号和引号之间不能有任何空格。你的代码里所有标签都写成了json: "xxx",这种写法会让json.Unmarshal无法正确识别标签规则,导致对应的JSON字段和结构体属性匹配失败,最终只能使用字段的零值(int类型为0,string类型为空字符串)。
修正后的结构体定义
只需要把所有结构体标签里的空格去掉即可,修正后的代码如下:
type SessionData struct { VmwareApiSessionId string `json:"value"` } type Vm struct { Mem int `json:"memory_size_MiB"` Vm string `json:"vm"` Name string `json:"name"` Powerstat string `json:"power_state"` Cpu int `json:"cpu_count"` } type ColVmList struct { Value []Vm `json:"value"` }
额外调试建议
修正后,json.Unmarshal就能正确把JSON中的memory_size_MiB、power_state、cpu_count等字段映射到结构体的对应属性上。如果你想更直观地验证反序列化结果,可以用json.MarshalIndent格式化输出结构体:
data, _ := json.MarshalIndent(allvmlist, "", " ") fmt.Println(string(data))
这样能清晰看到结构体的所有字段值是否正确填充。
内容的提问来源于stack exchange,提问作者sherpaurgen
相关产品推荐
相关产品推荐

