@@ -354,7 +354,7 @@ func (g *Generator) interfaceIsJsonUnmarshaller(t reflect.Type) bool {
354354 return t .Implements (reflect .TypeOf ((* json .Unmarshaler )(nil )).Elem ())
355355}
356356
357- func (g * Generator ) genStructFieldDecoder (t reflect.Type , f reflect.StructField ) error {
357+ func (g * Generator ) genStructFieldDecoder (t reflect.Type , f reflect.StructField , caseSensitive bool ) error {
358358 jsonName := g .fieldNamer .GetJSONFieldName (t , f )
359359 tags := parseFieldTags (f )
360360
@@ -365,7 +365,11 @@ func (g *Generator) genStructFieldDecoder(t reflect.Type, f reflect.StructField)
365365 return errors .New ("Mutually exclusive tags are specified: 'intern' and 'nocopy'" )
366366 }
367367
368- fmt .Fprintf (g .out , " case %q:\n " , jsonName )
368+ if caseSensitive {
369+ fmt .Fprintf (g .out , " case %q:\n " , jsonName )
370+ } else {
371+ fmt .Fprintf (g .out , " case %q:\n " , strings .ToLower (jsonName ))
372+ }
369373 if err := g .genTypeDecoder (f .Type , "out." + f .Name , tags , 3 ); err != nil {
370374 return err
371375 }
@@ -540,12 +544,19 @@ func (g *Generator) genStructDecoder(t reflect.Type) error {
540544
541545 fmt .Fprintln (g .out , " switch key {" )
542546 for _ , f := range fs {
543- if err := g .genStructFieldDecoder (t , f ); err != nil {
547+ if err := g .genStructFieldDecoder (t , f , true ); err != nil {
544548 return err
545549 }
546550 }
547551
548552 fmt .Fprintln (g .out , " default:" )
553+ fmt .Fprintln (g .out , " switch strings.ToLower(key) {" )
554+ for _ , f := range fs {
555+ if err := g .genStructFieldDecoder (t , f , false ); err != nil {
556+ return err
557+ }
558+ }
559+ fmt .Fprintln (g .out , " default:" )
549560 if g .disallowUnknownFields {
550561 fmt .Fprintln (g .out , ` in.AddError(&jlexer.LexerError{
551562 Offset: in.GetPos(),
@@ -557,6 +568,7 @@ func (g *Generator) genStructDecoder(t reflect.Type) error {
557568 } else {
558569 fmt .Fprintln (g .out , " in.SkipRecursive()" )
559570 }
571+ fmt .Fprintln (g .out , " }" )
560572 fmt .Fprintln (g .out , " }" )
561573 fmt .Fprintln (g .out , " in.WantComma()" )
562574 fmt .Fprintln (g .out , " }" )
0 commit comments