Und weitere Beispiele, wenn json.Unmarshal()
einen Fehler zurückgibt (neben bestimmten Ying ein ungültiger JSON):
Angeben eines nil
oder empty
slice:
i := 0
err := json.Unmarshal(nil, &i)
fmt.Println(err) // unexpected end of JSON input
einen nicht-Pointer angeben unmarshal in:
err = json.Unmarshal([]byte(`{"name":"a"}`), i)
fmt.Println(err) // json: Unmarshal(non-pointer int)
nil
als Zielzeiger spezifiziert wird:
err = json.Unmarshal([]byte(`{"name":"a"}`), nil)
fmt.Println(err) // json: Unmarshal(nil)
Angeben von JSON-Nummern th bei würde der Zieltyp überlaufen. Unter Angabe des doc von json.Unmarshal()
:
Wenn ein JSON-Wert nicht angemessen für einen bestimmten Zieltyp ist, oder wenn eine JSON-Nummer des Zieltyp überläuft, springt Abstellungs das Feld und schließt das unmarshalling so gut er kann. Wenn keine ernsthaften Fehler mehr auftreten, gibt Unmarshal einen UnmarshalTypeError zurück, der den frühesten solchen Fehler beschreibt.
Um dies zu demonstrieren:
var j int8
err = json.Unmarshal([]byte(`1112`), &j)
fmt.Println(err) // json: cannot unmarshal number 1112 into Go value of type int8
Sie wollen ein Beispiel machen, das funktioniert, oder zumindest kompiliert, [so] (http://play.golang.org/p/ywOPSds8zQ). 'Unmarshal' wird einen Fehler zurückgeben, wenn die Eingabe nicht gültig ist JSON (wie,' '' '' '' '' '' '' '' 'ändern, oder die 'close' Klammer entfernen). – twotwotwo
Es ist alles Open Source, Sie können auch die Implementierung von Unmarshal überprüfen: https://golang.org/src/encoding/json/decode.go?s=2621:2669#L64 (und checkValid: https://golang.org /src/encoding/json/scanner.go?s=732:781#L16) –