@@ -331,7 +331,7 @@ func (g *Generator) interfaceIsJsonUnmarshaller(t reflect.Type) bool {
331331 return t .Implements (reflect .TypeOf ((* json .Unmarshaler )(nil )).Elem ())
332332}
333333
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 {
335335 jsonName := g .fieldNamer .GetJSONFieldName (t , f )
336336 tags := parseFieldTags (f )
337337
@@ -342,7 +342,11 @@ func (g *Generator) genStructFieldDecoder(t reflect.Type, f reflect.StructField)
342342 return errors .New ("Mutually exclusive tags are specified: 'intern' and 'nocopy'" )
343343 }
344344
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+ }
346350 if err := g .genTypeDecoder (f .Type , "out." + f .Name , tags , 3 ); err != nil {
347351 return err
348352 }
@@ -522,12 +526,20 @@ func (g *Generator) genStructDecoder(t reflect.Type) error {
522526
523527 fmt .Fprintln (g .out , " switch key {" )
524528 for _ , f := range fs {
525- if err := g .genStructFieldDecoder (t , f ); err != nil {
529+ if err := g .genStructFieldDecoder (t , f , true ); err != nil {
526530 return err
527531 }
528532 }
529533
530534 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+
531543 if g .disallowUnknownFields {
532544 fmt .Fprintln (g .out , ` in.AddError(&jlexer.LexerError{
533545 Offset: in.GetPos(),
@@ -539,6 +551,7 @@ func (g *Generator) genStructDecoder(t reflect.Type) error {
539551 } else {
540552 fmt .Fprintln (g .out , " in.SkipRecursive()" )
541553 }
554+ fmt .Fprintln (g .out , " }" )
542555 fmt .Fprintln (g .out , " }" )
543556 fmt .Fprintln (g .out , " in.WantComma()" )
544557 fmt .Fprintln (g .out , " }" )
0 commit comments