diff --git a/gen/decoder.go b/gen/decoder.go index 606602f..49a020d 100644 --- a/gen/decoder.go +++ b/gen/decoder.go @@ -343,7 +343,8 @@ func getStructFields(t reflect.Type) ([]reflect.StructField, error) { var efields []reflect.StructField for i := 0; i < t.NumField(); i++ { f := t.Field(i) - if !f.Anonymous { + tags := parseFieldTags(f) + if !f.Anonymous || tags.name != "" { continue } @@ -362,7 +363,8 @@ func getStructFields(t reflect.Type) ([]reflect.StructField, error) { var fields []reflect.StructField for i := 0; i < t.NumField(); i++ { f := t.Field(i) - if f.Anonymous { + tags := parseFieldTags(f) + if f.Anonymous && tags.name == "" { continue } diff --git a/tests/embedded_type.go b/tests/embedded_type.go index 66470b6..346cf4a 100644 --- a/tests/embedded_type.go +++ b/tests/embedded_type.go @@ -6,19 +6,25 @@ type EmbeddedType struct { Inner struct { EmbeddedInnerType } - Field2 int + Field2 int + EmbeddedInnerType2 `json:"named"` } type EmbeddedInnerType struct { Field1 int } +type EmbeddedInnerType2 struct { + Field3 int +} + var embeddedTypeValue EmbeddedType func init() { embeddedTypeValue.Field1 = 1 embeddedTypeValue.Field2 = 2 embeddedTypeValue.Inner.Field1 = 3 + embeddedTypeValue.Field3 = 4 } -var embeddedTypeValueString = `{"Inner":{"Field1":3},"Field2":2,"Field1":1}` +var embeddedTypeValueString = `{"Inner":{"Field1":3},"Field2":2,"named":{"Field3":4},"Field1":1}`