From 0e998db2a90f37511fc79aeb428b6744826a0448 Mon Sep 17 00:00:00 2001 From: Phil Pearl Date: Thu, 10 Jan 2019 18:43:09 +0000 Subject: [PATCH 1/2] Stdlib json handles embedded structs with json tags differently. See https://play.golang.org/p/KXZbjG0JBle for an example --- gen/decoder.go | 6 ++++-- tests/embedded_type.go | 10 ++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) 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}` From 4dd12460d3c3df033deb1429466e7f0e60d24b06 Mon Sep 17 00:00:00 2001 From: Phil Pearl Date: Thu, 10 Jan 2019 18:56:11 +0000 Subject: [PATCH 2/2] Fix golint issue --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 884f8bb..7789141 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,4 +6,4 @@ install: - go get github.com/ugorji/go/codec - go get github.com/pquerna/ffjson/fflib/v1 - go get github.com/json-iterator/go - - go get github.com/golang/lint/golint + - go get golang.org/x/lint/golint