@@ -331,7 +331,7 @@ func (g *Generator) interfaceIsJsonUnmarshaller(t reflect.Type) bool {
331
331
return t .Implements (reflect .TypeOf ((* json .Unmarshaler )(nil )).Elem ())
332
332
}
333
333
334
- func (g * Generator ) genStructFieldDecoder (t reflect.Type , f reflect.StructField ) error {
334
+ func (g * Generator ) genStructFieldDecoder (t reflect.Type , f reflect.StructField , caseSensitive bool ) error {
335
335
jsonName := g .fieldNamer .GetJSONFieldName (t , f )
336
336
tags := parseFieldTags (f )
337
337
@@ -342,7 +342,11 @@ func (g *Generator) genStructFieldDecoder(t reflect.Type, f reflect.StructField)
342
342
return errors .New ("Mutually exclusive tags are specified: 'intern' and 'nocopy'" )
343
343
}
344
344
345
- fmt .Fprintf (g .out , " case %q:\n " , jsonName )
345
+ if caseSensitive {
346
+ fmt .Fprintf (g .out , " case %q:\n " , jsonName )
347
+ } else {
348
+ fmt .Fprintf (g .out , " case %q:\n " , strings .ToLower (jsonName ))
349
+ }
346
350
if err := g .genTypeDecoder (f .Type , "out." + f .Name , tags , 3 ); err != nil {
347
351
return err
348
352
}
@@ -522,12 +526,20 @@ func (g *Generator) genStructDecoder(t reflect.Type) error {
522
526
523
527
fmt .Fprintln (g .out , " switch key {" )
524
528
for _ , f := range fs {
525
- if err := g .genStructFieldDecoder (t , f ); err != nil {
529
+ if err := g .genStructFieldDecoder (t , f , true ); err != nil {
526
530
return err
527
531
}
528
532
}
529
533
530
534
fmt .Fprintln (g .out , " default:" )
535
+ fmt .Fprintln (g .out , " switch strings.ToLower(key) {" )
536
+ for _ , f := range fs {
537
+ if err := g .genStructFieldDecoder (t , f , false ); err != nil {
538
+ return err
539
+ }
540
+ }
541
+ fmt .Fprintln (g .out , " default:" )
542
+
531
543
if g .disallowUnknownFields {
532
544
fmt .Fprintln (g .out , ` in.AddError(&jlexer.LexerError{
533
545
Offset: in.GetPos(),
@@ -539,6 +551,7 @@ func (g *Generator) genStructDecoder(t reflect.Type) error {
539
551
} else {
540
552
fmt .Fprintln (g .out , " in.SkipRecursive()" )
541
553
}
554
+ fmt .Fprintln (g .out , " }" )
542
555
fmt .Fprintln (g .out , " }" )
543
556
fmt .Fprintln (g .out , " in.WantComma()" )
544
557
fmt .Fprintln (g .out , " }" )
0 commit comments