Stdlib json handles embedded structs with json tags differently.

See 	https://play.golang.org/p/KXZbjG0JBle for an example
This commit is contained in:
Phil Pearl
2019-01-10 18:43:09 +00:00
parent 60711f1a83
commit 0e998db2a9
2 changed files with 12 additions and 4 deletions
+4 -2
View File
@@ -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
}
+8 -2
View File
@@ -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}`