summaryrefslogtreecommitdiff
path: root/src/encoding/json/decode_test.go
diff options
context:
space:
mode:
authorLE Manh Cuong <cuong.manhle.vn@gmail.com>2018-10-28 01:44:09 +0700
committerDaniel Martí <mvdan@mvdan.cc>2019-03-05 12:34:11 +0000
commit29bc4f12581d836a96139c924f16a4987324edd1 (patch)
treecb26fdd26ae6dc3d13c9fe706643827d930c7371 /src/encoding/json/decode_test.go
parent95d4e6158b4199e1eee957e2c8c934d2cb86c35e (diff)
downloadgo-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.go24
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) {