1
0
mirror of https://github.com/json-iterator/go.git synced 2024-11-24 08:22:14 +02:00

config: add OnlyTaggedField config, only process tagged fields in struct

This commit is contained in:
李盼 2018-01-09 17:29:47 +08:00
parent 0ab880662f
commit c27f6f9350
2 changed files with 7 additions and 1 deletions

View File

@ -18,6 +18,7 @@ type Config struct {
SortMapKeys bool
UseNumber bool
TagKey string
OnlyTaggedField bool
ValidateJsonRawMessage bool
ObjectFieldMustBeSimpleString bool
}
@ -27,6 +28,7 @@ type frozenConfig struct {
sortMapKeys bool
indentionStep int
objectFieldMustBeSimpleString bool
onlyTaggedField bool
decoderCache unsafe.Pointer
encoderCache unsafe.Pointer
extensions []Extension
@ -77,6 +79,7 @@ func (cfg Config) Froze() API {
sortMapKeys: cfg.SortMapKeys,
indentionStep: cfg.IndentionStep,
objectFieldMustBeSimpleString: cfg.ObjectFieldMustBeSimpleString,
onlyTaggedField: cfg.OnlyTaggedField,
streamPool: make(chan *Stream, 16),
iteratorPool: make(chan *Iterator, 16),
}

View File

@ -245,7 +245,10 @@ func describeStruct(cfg *frozenConfig, prefix string, typ reflect.Type) *StructD
bindings := []*Binding{}
for i := 0; i < typ.NumField(); i++ {
field := typ.Field(i)
tag := field.Tag.Get(cfg.getTagKey())
tag, hastag := field.Tag.Lookup(cfg.getTagKey())
if cfg.onlyTaggedField && !hastag {
continue
}
tagParts := strings.Split(tag, ",")
if tag == "-" {
continue