Skip to content

Commit

Permalink
Merge pull request json-iterator#316 from proemergotech/master
Browse files Browse the repository at this point in the history
fix json-iterator#308 do NOT skip embedded structs without tag when OnlyTaggedFiel…
  • Loading branch information
taowen authored Feb 8, 2019
2 parents 1352fe2 + 5d7fea6 commit 7b68908
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 1 deletion.
55 changes: 55 additions & 0 deletions api_tests/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -172,3 +172,58 @@ func Test_CaseSensitive_MoreThanTenFields(t *testing.T) {
should.Equal(tc.expectedOutput, output)
}
}

type onlyTaggedFieldStruct struct {
A string `json:"a"`
B string
FSimpl F `json:"f_simpl"`
ISimpl I
FPtr *F `json:"f_ptr"`
IPtr *I
F
*I
}

type F struct {
G string `json:"g"`
H string
}

type I struct {
J string `json:"j"`
K string
}

func Test_OnlyTaggedField(t *testing.T) {
should := require.New(t)

obj := onlyTaggedFieldStruct{
A: "a",
B: "b",
FSimpl: F{G: "g", H: "h"},
ISimpl: I{J: "j", K: "k"},
FPtr: &F{G: "g", H: "h"},
IPtr: &I{J: "j", K: "k"},
F: F{G: "g", H: "h"},
I: &I{J: "j", K: "k"},
}

output, err := jsoniter.Config{OnlyTaggedField: true}.Froze().Marshal(obj)
should.Nil(err)

m := make(map[string]interface{})
err = jsoniter.Unmarshal(output, &m)
should.Nil(err)

should.Equal(map[string]interface{}{
"a": "a",
"f_simpl": map[string]interface{}{
"g": "g",
},
"f_ptr": map[string]interface{}{
"g": "g",
},
"g": "g",
"j": "j",
}, m)
}
2 changes: 1 addition & 1 deletion reflect_extension.go
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@ func describeStruct(ctx *ctx, typ reflect2.Type) *StructDescriptor {
for i := 0; i < structType.NumField(); i++ {
field := structType.Field(i)
tag, hastag := field.Tag().Lookup(ctx.getTagKey())
if ctx.onlyTaggedField && !hastag {
if ctx.onlyTaggedField && !hastag && !field.Anonymous() {
continue
}
tagParts := strings.Split(tag, ",")
Expand Down

0 comments on commit 7b68908

Please sign in to comment.