我有結構 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 屬性alamat
和umur
您的屬性valB
將被忽略,因為它們在結構中不匹配A
并且被設置為它們的默認類型。name
age
- 1 回答
- 0 關注
- 132 瀏覽
添加回答
舉報
0/150
提交
取消