我正在從第三方網(wǎng)站(家庭用電量)檢索 JSON,并且根據(jù)我從該網(wǎng)站請求的內(nèi)容,返回的 JSON 可能是也可能不是數(shù)組。例如,如果我請求我的智能電表列表,我會得到這個(結(jié)果被截斷,因為尺寸很大):{"gwrcmds":{"gwrcmd":{"gcmd":"SPA_UserGetSmartMeterList","gdata":{"gip":{"version":"1"...其中g(shù)wrcmd是單個元素。但是如果我要求在過去半小時內(nèi)用電,我會得到這個:{"gwrcmds":{"gwrcmd":[{"gcmd":"DeviceGetChart","gdata":{"gip":{"version":"1" ...看看gwrcmd現(xiàn)在如何成為一個數(shù)組?在我的 Go 應(yīng)用程序中,我有一個看起來像這樣的結(jié)構(gòu)(再次被截斷,因為它持續(xù)了一段時間。在“版本”下面有更多的子結(jié)構(gòu)和屬性:type Response struct {
Gwrcmds struct {
Gwrcmd struct {
Gcmd string
Gdata struct {
Gip struct {
Version string如果gwrcmd是一個數(shù)組,Gwrcmd需要是一個[]struct { },但如果不是,它只是一個普通的舊struct { }問題是,json.Unmarshal如果 JSON 有一個數(shù)組而結(jié)構(gòu)沒有切片(反之亦然),則只會返回錯誤。我是否需要創(chuàng)建第二個結(jié)構(gòu)體來復(fù)制第一個結(jié)構(gòu)體(除了用 a[]struct { }代替),還是有更好的方法來做到這一點?我想到了一些接口,但我還沒有真正接觸過那些,所以我不能 100% 確定它們。
2 回答

白衣非少年
TA貢獻1155條經(jīng)驗 獲得超0個贊
您可以嘗試使自定義 json 解組方法,例如
func (a *GwrcmCustom) UnmarshalJSON(b []byte) (err error) {
g, ga := Gwrcmd{}, []Gwrcmd{}
if err = json.Unmarshal(b, &g); err == nil {
*a = make([]Gwrcmd, 1)
[]Gwrcmd(*a)[0] = Gwrcmd(g)
return
}
if err = json.Unmarshal(b, &ga); err == nil {
*a = GwrcmCustom(ga)
return
}
return
}
GwrcmCustom 是自定義類型,切片 Gwrcm
type GwrcmCustom []Gwrcmd
所以我們總是會得到切片
試試這個 Go playground
我希望這個能幫上忙
- 2 回答
- 0 關(guān)注
- 226 瀏覽
添加回答
舉報
0/150
提交
取消