Ve daha fazla örnek bir hata döndürür json.Unmarshal()
zaman (:
unmarshal fonksiyonu diğer durumlarda hataları dönmek yok özelliğinin yanı sıra Ying geçersiz JSON):
:
err = json.Unmarshal([]byte(`{"name":"a"}`), i)
fmt.Println(err) // json: Unmarshal(non-pointer int)
hedef işaretçi olarak nil
belirtme: içine unmarshal olmayan bir işaretçi belirtilmesi
i := 0
err := json.Unmarshal(nil, &i)
fmt.Println(err) // unexpected end of JSON input
:
bir nil
veya empty
dilim Belirlenmesi
err = json.Unmarshal([]byte(`{"name":"a"}`), nil)
fmt.Println(err) // json: Unmarshal(nil)
JSON numaralarını belirtme th Hedef türünü taşar. json.Unmarshal()
ait doktor alıntı: JSON numarası hedef türü taşıyor ise
JSON değer verilen bir hedef türü için uygun değilse, ya unmarshal bu alanı atlar ve mümkün olan en iyi şekilde unmarshalling tamamlar. Daha ciddi hatalarla karşılaşılmazsa, Unmarshal en eski hatayı açıklayan bir UnmarshalTypeError döndürür.
Bunu göstermek için: Bir daktilo nil pointer içine unmarshal denerseniz
var j int8
err = json.Unmarshal([]byte(`1112`), &j)
fmt.Println(err) // json: cannot unmarshal number 1112 into Go value of type int8
[Bu gibi] (http://play.golang.org/p/ywOPSds8zQ) çalışan veya en azından derleyen bir örnek yapmak istersiniz. "Unmarshal", giriş geçerli bir JSON olmadığı zaman ("false" değerini "hello" olarak değiştirirse veya close brace'ı kaldırdığında) bir hata döndürür. – twotwotwo
Hepsi açık kaynak, Unmarshal'ın uygulamasını da her zaman kontrol edebilirsiniz: https://golang.org/src/encoding/json/decode.go?s=2621:2669#L64 (ve checkValid: https://golang.org /src/encoding/json/scanner.go?s=732:781#L16) –