@@ -3711,8 +3711,14 @@ func (d *jsonDecDriverBytes) DecodeTime() (t time.Time) {
37113711 }
37123712
37133713 bs = d .readUnescapedString ()
3714- t , err := time .Parse (time .RFC3339 , stringView (bs ))
3715- halt .onerror (err )
3714+ var err error
3715+ for _ , v := range d .timeFmtLayouts {
3716+ t , err = time .Parse (v , stringView (bs ))
3717+ if err == nil {
3718+ return
3719+ }
3720+ }
3721+ halt .errorStr ("error decoding time" )
37163722 return
37173723}
37183724
@@ -3891,7 +3897,7 @@ func (d *jsonDecDriverBytes) DecodeBytes() (bs []byte, state dBytesAttachState)
38913897 return
38923898 }
38933899 }
3894- halt .errorf ("error decoding base64 binary '%s': %v" , any (bs1 ), err )
3900+ halt .errorf ("error decoding byte string '%s': %v" , any (bs1 ), err )
38953901 return
38963902}
38973903
@@ -4015,6 +4021,7 @@ func (d *jsonDecDriverBytes) DecodeNaked() {
40154021
40164022 d .advance ()
40174023 var bs []byte
4024+ var err error
40184025 switch d .tok {
40194026 case 'n' :
40204027 d .checkLit3 ([3 ]byte {'u' , 'l' , 'l' }, d .r .readn3 ())
@@ -4036,7 +4043,7 @@ func (d *jsonDecDriverBytes) DecodeNaked() {
40364043 d .tok = 0
40374044 bs , z .b = d .dblQuoteStringAsBytes ()
40384045 att := d .d .attachState (z .b )
4039- if jsonNakedBoolNullInQuotedStr &&
4046+ if jsonNakedBoolNumInQuotedStr &&
40404047 d .h .MapKeyAsString && len (bs ) > 0 && d .d .c == containerMapKey {
40414048 switch string (bs ) {
40424049
@@ -4047,8 +4054,7 @@ func (d *jsonDecDriverBytes) DecodeNaked() {
40474054 z .v = valueTypeBool
40484055 z .b = false
40494056 default :
4050-
4051- if err := jsonNakedNum (z , bs , d .h .PreferFloat , d .h .SignedInteger ); err != nil {
4057+ if err = jsonNakedNum (z , bs , d .h .PreferFloat , d .h .SignedInteger ); err != nil {
40524058 z .v = valueTypeString
40534059 z .s = d .d .detach2Str (bs , att )
40544060 }
@@ -4062,7 +4068,7 @@ func (d *jsonDecDriverBytes) DecodeNaked() {
40624068 if len (bs ) == 0 {
40634069 halt .errorStr ("decode number from empty string" )
40644070 }
4065- if err : = jsonNakedNum (z , bs , d .h .PreferFloat , d .h .SignedInteger ); err != nil {
4071+ if err = jsonNakedNum (z , bs , d .h .PreferFloat , d .h .SignedInteger ); err != nil {
40664072 halt .errorf ("decode number from %s: %v" , any (bs ), err )
40674073 }
40684074 }
@@ -4086,8 +4092,14 @@ func (e *jsonEncDriverBytes) reset() {
40864092 ho .reset (e .h )
40874093 e .timeFmt = ho .timeFmt
40884094 e .bytesFmt = ho .bytesFmt
4089- e .timeFmtLayout = ho .timeFmtLayouts [0 ]
4090- e .byteFmter = ho .byteFmters [0 ]
4095+ e .timeFmtLayout = ""
4096+ e .byteFmter = nil
4097+ if len (ho .timeFmtLayouts ) > 0 {
4098+ e .timeFmtLayout = ho .timeFmtLayouts [0 ]
4099+ }
4100+ if len (ho .byteFmters ) > 0 {
4101+ e .byteFmter = ho .byteFmters [0 ]
4102+ }
40914103 e .rawext = ho .rawext
40924104}
40934105
@@ -7857,8 +7869,14 @@ func (d *jsonDecDriverIO) DecodeTime() (t time.Time) {
78577869 }
78587870
78597871 bs = d .readUnescapedString ()
7860- t , err := time .Parse (time .RFC3339 , stringView (bs ))
7861- halt .onerror (err )
7872+ var err error
7873+ for _ , v := range d .timeFmtLayouts {
7874+ t , err = time .Parse (v , stringView (bs ))
7875+ if err == nil {
7876+ return
7877+ }
7878+ }
7879+ halt .errorStr ("error decoding time" )
78627880 return
78637881}
78647882
@@ -8037,7 +8055,7 @@ func (d *jsonDecDriverIO) DecodeBytes() (bs []byte, state dBytesAttachState) {
80378055 return
80388056 }
80398057 }
8040- halt .errorf ("error decoding base64 binary '%s': %v" , any (bs1 ), err )
8058+ halt .errorf ("error decoding byte string '%s': %v" , any (bs1 ), err )
80418059 return
80428060}
80438061
@@ -8161,6 +8179,7 @@ func (d *jsonDecDriverIO) DecodeNaked() {
81618179
81628180 d .advance ()
81638181 var bs []byte
8182+ var err error
81648183 switch d .tok {
81658184 case 'n' :
81668185 d .checkLit3 ([3 ]byte {'u' , 'l' , 'l' }, d .r .readn3 ())
@@ -8182,7 +8201,7 @@ func (d *jsonDecDriverIO) DecodeNaked() {
81828201 d .tok = 0
81838202 bs , z .b = d .dblQuoteStringAsBytes ()
81848203 att := d .d .attachState (z .b )
8185- if jsonNakedBoolNullInQuotedStr &&
8204+ if jsonNakedBoolNumInQuotedStr &&
81868205 d .h .MapKeyAsString && len (bs ) > 0 && d .d .c == containerMapKey {
81878206 switch string (bs ) {
81888207
@@ -8193,8 +8212,7 @@ func (d *jsonDecDriverIO) DecodeNaked() {
81938212 z .v = valueTypeBool
81948213 z .b = false
81958214 default :
8196-
8197- if err := jsonNakedNum (z , bs , d .h .PreferFloat , d .h .SignedInteger ); err != nil {
8215+ if err = jsonNakedNum (z , bs , d .h .PreferFloat , d .h .SignedInteger ); err != nil {
81988216 z .v = valueTypeString
81998217 z .s = d .d .detach2Str (bs , att )
82008218 }
@@ -8208,7 +8226,7 @@ func (d *jsonDecDriverIO) DecodeNaked() {
82088226 if len (bs ) == 0 {
82098227 halt .errorStr ("decode number from empty string" )
82108228 }
8211- if err : = jsonNakedNum (z , bs , d .h .PreferFloat , d .h .SignedInteger ); err != nil {
8229+ if err = jsonNakedNum (z , bs , d .h .PreferFloat , d .h .SignedInteger ); err != nil {
82128230 halt .errorf ("decode number from %s: %v" , any (bs ), err )
82138231 }
82148232 }
@@ -8232,8 +8250,14 @@ func (e *jsonEncDriverIO) reset() {
82328250 ho .reset (e .h )
82338251 e .timeFmt = ho .timeFmt
82348252 e .bytesFmt = ho .bytesFmt
8235- e .timeFmtLayout = ho .timeFmtLayouts [0 ]
8236- e .byteFmter = ho .byteFmters [0 ]
8253+ e .timeFmtLayout = ""
8254+ e .byteFmter = nil
8255+ if len (ho .timeFmtLayouts ) > 0 {
8256+ e .timeFmtLayout = ho .timeFmtLayouts [0 ]
8257+ }
8258+ if len (ho .byteFmters ) > 0 {
8259+ e .byteFmter = ho .byteFmters [0 ]
8260+ }
82378261 e .rawext = ho .rawext
82388262}
82398263
0 commit comments