そして、より多くの例を特定の英無効JSON):
:
err = json.Unmarshal([]byte(`{"name":"a"}`), i)
fmt.Println(err) // json: Unmarshal(non-pointer int)
がターゲットポインタとしてnil
を指定:にアンマーシャルする非ポインタを指定
i := 0
err := json.Unmarshal(nil, &i)
fmt.Println(err) // unexpected end of JSON input
:
がnil
又はempty
スライスの指定
err = json.Unmarshal([]byte(`{"name":"a"}`), nil)
fmt.Println(err) // json: Unmarshal(nil)
JSON番号を指定するth atはターゲットタイプをオーバーフローします。 json.Unmarshal()
のドキュメントを引用:JSON番号はターゲット・タイプをオーバーフローした場合
をJSON値が与えられた目標タイプに適していない場合、または、非整列化は、そのフィールドをスキップし、それができる最善のように非整列化が完了します。それ以上重大なエラーが発生しなければ、Unmarshalはこのようなエラーを最も早く記述するUnmarshalTypeErrorを返します。
はこれを実証するために:あなたが入力したNULLポインタに非整列化しようとした場合
var j int8
err = json.Unmarshal([]byte(`1112`), &j)
fmt.Println(err) // json: cannot unmarshal number 1112 into Go value of type int8
[好きな](http://play.golang.org/p/ywOPSds8zQ)という作品を作ったり、少なくともコンパイルしたりしたいとします。 'Unmarshal'は、入力が有効なJSON(' false'から 'hello'への変更、または閉じ括弧の削除など)でないときにエラーを返します。 – twotwotwo
これはオープンソースなので、Unmarshalの実装もいつでもチェックできます:https://golang.org/src/encoding/json/decode.go?s=2621:2669#L64(およびcheckValid:https://golang.org) /src/encoding/json/scanner.go?s=732:781#L16) –