From 1c5c7763a9ed04e110331fad0c7b67ff69a1e6b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Samin?= Date: Thu, 28 Feb 2019 13:40:02 +0100 Subject: [PATCH] fix: result zero values --- encoder.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/encoder.go b/encoder.go index 2afd85b..0a69058 100644 --- a/encoder.go +++ b/encoder.go @@ -90,7 +90,8 @@ func (e *Encoder) Sdump(i interface{}) (string, error) { func (e *Encoder) fdumpInterface(w map[string]interface{}, i interface{}, roots []string) error { f := valueFromInterface(i) - if !validAndNotEmpty(f) { + k := reflect.ValueOf(i).Kind() + if k == reflect.Ptr && reflect.ValueOf(i).IsNil() || !validAndNotEmpty(f) { if len(roots) == 0 { return nil } @@ -261,7 +262,17 @@ func (e *Encoder) fdumpStruct(w map[string]interface{}, s reflect.Value, roots [ } for i := 0; i < s.NumField(); i++ { - if !validAndNotEmpty(s.Field(i)) { + k := reflect.ValueOf(i).Kind() + if k == reflect.Ptr && reflect.ValueOf(i).IsNil() { + if len(roots) == 0 { + continue + } + k := fmt.Sprintf("%s", strings.Join(sliceFormat(roots, e.Formatters), e.Separator)) + w[k] = "" + continue + } + + if !s.Field(i).CanInterface() { continue } croots := append(roots, s.Type().Field(i).Name)