我有以下格式的json{ "status_code": 200, "status_message": "OK", "response": { "Messages": [ "CODE_NOT_AVAILABLE" ], "UnknownDevices": { "": [ "6", "7", "8", "9", "10" ] } }}正如我们看到的,我们缺少一个索引键,在 unknownDevices 之后,我试图通过以下方式使用 golan 解组这个 jsonpackage mainimport ( "encoding/json" "fmt")type pushWooshResponse struct { Status int `json:"status_code"` Status_msg string `json:"status_message"` Response response}type response struct { Message []string `json:"Messages"` UnknownDevices devices}type devices struct { Udevices []string `json:""`}func main() { itemInfoR := `{"status_code":200,"status_message":"OK","response":{"Messages":["CODE_NOT_AVAILABLE"],"UnknownDevices":{"devices":["6","7","8","9","10"]}}}` itemInfoBytes := []byte(itemInfoR) var ItemInfo pushWooshResponse er := json.Unmarshal(itemInfoBytes, &ItemInfo) if er != nil { fmt.Println("Error", er.Error()) } else { fmt.Println(ItemInfo) }}输出是{200 OK {[CODE_NOT_AVAILABLE] {[]}}}除了最后一部分外,一切都正常,我无法解开这一部分。你能帮我把 json 的最后一部分 umarhal 吗?
1 回答

红颜莎娜
TA贡献1842条经验 获得超12个赞
可能还有其他选择,但是每当您看到奇怪的 JSON 时,您总是可以通过实现json.Unmarshaler和/或json.Marshaler.
也许是这样的:
type devices struct {
Udevices []string
}
func (d *devices) UnmarshalJSON(b []byte) error {
var x map[string][]string
err := json.Unmarshal(b, &x)
if err == nil {
// perhaps check that only a single
// key exists in the map as well
d.Udevices = x[""]
}
return err
}
func (d devices) MarshalJSON() ([]byte, error) {
x := map[string][]string{"": d.Udevices}
return json.Marshal(x)
}
没有找到匹配的内容?试试慕课网站内搜索吧
- 1 回答
- 0 关注
- 191 浏览
添加回答
举报
0/150
提交
取消