więcej przykładów kiedy json.Unmarshal()
zwraca błąd (oprócz specyfikacji Ying nieprawidłowy JSON)
Określanie nil
lub empty
plaster:
i := 0
err := json.Unmarshal(nil, &i)
fmt.Println(err) // unexpected end of JSON input
Określanie non-wskaźnik unmarshal na:
err = json.Unmarshal([]byte(`{"name":"a"}`), i)
fmt.Println(err) // json: Unmarshal(non-pointer int)
Określanie nil
jako wskaźnik docelowy:
err = json.Unmarshal([]byte(`{"name":"a"}`), nil)
fmt.Println(err) // json: Unmarshal(nil)
Określanie numerów JSON th at spowoduje przepełnienie typu celu. Powołując się na dokument z json.Unmarshal()
:
Jeśli wartość JSON nie jest odpowiedni dla danego typu docelowym lub jeżeli liczba JSON przelewa typ docelowy, unmarshal pomija tej dziedzinie i uzupełnia unmarshalling najlepiej jak to możliwe. Jeśli nie napotkamy poważniejszych błędów, Unmarshal zwraca UnmarshalTypeError opisujący najwcześniejszy taki błąd.
Aby to wykazać:
var j int8
err = json.Unmarshal([]byte(`1112`), &j)
fmt.Println(err) // json: cannot unmarshal number 1112 into Go value of type int8
Chcesz zrobić przykład, który działa, lub przynajmniej kompiluje, [jak to] (http://play.golang.org/p/ywOPSds8zQ). 'Unmarshal' zwróci błąd, gdy wejście nie będzie poprawne JSON (np. Zmień' false' na 'hello' lub usuń klamrę zamykającą). – twotwotwo
To wszystko open source, zawsze możesz też sprawdzić implementację Unmarshal: https://golang.org/src/encoding/json/decode.go?s=2621:2669#L64 (i checkValid: https://golang.org /src/encoding/json/scanner.go?s=732:781#L16) –