@@ -62,6 +62,21 @@ func (*SS) UnmarshalJSON(data []byte) error {
62
62
return & UnmarshalTypeError {Value : "number" , Type : reflect .TypeFor [SS ]()}
63
63
}
64
64
65
+ type TAlias T
66
+
67
+ func (tt * TAlias ) UnmarshalJSON (data []byte ) error {
68
+ t := T {}
69
+ if err := Unmarshal (data , & t ); err != nil {
70
+ return err
71
+ }
72
+ * tt = TAlias (t )
73
+ return nil
74
+ }
75
+
76
+ type TOuter struct {
77
+ T TAlias
78
+ }
79
+
65
80
// ifaceNumAsFloat64/ifaceNumAsNumber are used to test unmarshaling with and
66
81
// without UseNumber
67
82
var ifaceNumAsFloat64 = map [string ]any {
@@ -428,6 +443,7 @@ var unmarshalTests = []struct {
428
443
{CaseName : Name ("" ), in : `{"x": 1}` , ptr : new (tx ), out : tx {}},
429
444
{CaseName : Name ("" ), in : `{"x": 1}` , ptr : new (tx ), err : fmt .Errorf ("json: unknown field \" x\" " ), disallowUnknownFields : true },
430
445
{CaseName : Name ("" ), in : `{"S": 23}` , ptr : new (W ), out : W {}, err : & UnmarshalTypeError {"number" , reflect .TypeFor [SS ](), 0 , "W" , "S" }},
446
+ {CaseName : Name ("" ), in : `{"T": {"X": 23}}` , ptr : new (TOuter ), out : TOuter {}, err : & UnmarshalTypeError {"number" , reflect .TypeFor [string ](), 0 , "TOuter" , "T.X" }},
431
447
{CaseName : Name ("" ), in : `{"F1":1,"F2":2,"F3":3}` , ptr : new (V ), out : V {F1 : float64 (1 ), F2 : int32 (2 ), F3 : Number ("3" )}},
432
448
{CaseName : Name ("" ), in : `{"F1":1,"F2":2,"F3":3}` , ptr : new (V ), out : V {F1 : Number ("1" ), F2 : int32 (2 ), F3 : Number ("3" )}, useNumber : true },
433
449
{CaseName : Name ("" ), in : `{"k1":1,"k2":"s","k3":[1,2.0,3e-3],"k4":{"kk1":"s","kk2":2}}` , ptr : new (any ), out : ifaceNumAsFloat64 },
0 commit comments