diff options
author | LE Manh Cuong <cuong.manhle.vn@gmail.com> | 2018-10-28 01:44:09 +0700 |
---|---|---|
committer | Daniel Martí <mvdan@mvdan.cc> | 2019-03-05 12:34:11 +0000 |
commit | 29bc4f12581d836a96139c924f16a4987324edd1 (patch) | |
tree | cb26fdd26ae6dc3d13c9fe706643827d930c7371 /src/encoding/json/decode_test.go | |
parent | 95d4e6158b4199e1eee957e2c8c934d2cb86c35e (diff) | |
download | go-git-29bc4f12581d836a96139c924f16a4987324edd1.tar.gz |
encoding/json: add Path to UnmarshalTypeError
When parsing nested object, UnmarshalTypeError does not contain actual
path to nested field in original JSON.
This commit change Field to contain the full path to that field. One
can get the Field name by stripping all the leading path elements.
Fixes #22369
Change-Id: I6969cc08abe8387a351e3fb2944adfaa0dccad2a
Reviewed-on: https://go-review.googlesource.com/c/go/+/145218
Reviewed-by: Daniel Martí <mvdan@mvdan.cc>
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/encoding/json/decode_test.go')
-rw-r--r-- | src/encoding/json/decode_test.go | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/encoding/json/decode_test.go b/src/encoding/json/decode_test.go index 60454c6058..d99d65d763 100644 --- a/src/encoding/json/decode_test.go +++ b/src/encoding/json/decode_test.go @@ -45,6 +45,14 @@ type W struct { S SS } +type P struct { + PP PP +} + +type PP struct { + T T +} + type SS string func (*SS) UnmarshalJSON(data []byte) error { @@ -816,7 +824,7 @@ var unmarshalTests = []unmarshalTest{ err: &UnmarshalTypeError{ Value: "string", Struct: "V", - Field: "F2", + Field: "V.F2", Type: reflect.TypeOf(int32(0)), Offset: 20, }, @@ -827,7 +835,7 @@ var unmarshalTests = []unmarshalTest{ err: &UnmarshalTypeError{ Value: "string", Struct: "V", - Field: "F2", + Field: "V.F2", Type: reflect.TypeOf(int32(0)), Offset: 30, }, @@ -923,6 +931,18 @@ var unmarshalTests = []unmarshalTest{ ptr: new(MustNotUnmarshalText), err: &UnmarshalTypeError{Value: "object", Type: reflect.TypeOf(&MustNotUnmarshalText{}), Offset: 1}, }, + // #22369 + { + in: `{"PP": {"T": {"Y": "bad-type"}}}`, + ptr: new(P), + err: &UnmarshalTypeError{ + Value: "string", + Struct: "T", + Field: "PP.T.Y", + Type: reflect.TypeOf(int(0)), + Offset: 29, + }, + }, } func TestMarshal(t *testing.T) { |