亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當 json 輸入結構錯誤時,Unmarshall 應該返回錯誤

當 json 輸入結構錯誤時,Unmarshall 應該返回錯誤

Go
千巷貓影 2023-06-12 09:19:14
我有結構 A 和 B。當 JSON 字符串 A 被解組為結構 A 時它是有效的,但是如果 JSON 字符串 A 被解組為結構 B 它仍然是成功的(這不應該)。有什么方法可以檢測到錯誤的 JSON 輸入已被錯誤地轉換為錯誤的結構類型嗎?請看下面的代碼:package mainimport (? ? "encoding/json"? ? "fmt")type A struct {? ? Name string `json:"name"`? ? Age? int? ? `json:"age"`}type B struct {? ? Alamat string `json:"alamat"`? ? Umur? ?int? ? `json:"umur"`}func main() {? ? var structA A? ? var structAA A? ? valA := "{\"name\":\"budi\",\"age\":10}"? ? valB := "{\"alamat\":\"jakarta\",\"umur\":120}"? ? //correct case? ? err := json.Unmarshal([]byte(valA), &structA)? ? if err != nil {? ? ? ? fmt.Println("fail unmarshal")? ? }? ? fmt.Println(structA.Name)? ? fmt.Println(structA.Age)? ? //unmarshalled successfully but with wrong json? ? err = json.Unmarshal([]byte(valB), &structAA)? ? if err != nil {? ? ? ? fmt.Println("fail unmarshal")? ? }? ? fmt.Println(structAA.Name)? ? fmt.Println(structAA.Age)}
查看完整描述

1 回答

?
瀟瀟雨雨

TA貢獻1833條經驗 獲得超4個贊

默認情況下,參考文檔json.Unmarshal(data []byte, v interface{}), 并不像您想象的那樣工作:

默認情況下,沒有相應結構字段的對象鍵將被忽略(參見 Decoder.DisallowUnknownFields 的替代方法)。

因此,JSON 屬性alamatumur您的屬性valB將被忽略,因為它們在結構中不匹配A并且被設置為它們的默認類型。nameage



查看完整回答
反對 回復 2023-06-12
  • 1 回答
  • 0 關注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號