You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 14:52:33