From 4cdddbd6e0f57816669ceba03b20a278bf173055 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Tue, 4 Jan 2022 18:01:54 +0000 Subject: [PATCH] Recurse map fields inside structs --- util/gconv/gconv_map.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/util/gconv/gconv_map.go b/util/gconv/gconv_map.go index c42f8e007..f448a8d6b 100644 --- a/util/gconv/gconv_map.go +++ b/util/gconv/gconv_map.go @@ -323,7 +323,20 @@ func doMapConvertForMapOrStructValue(isRoot bool, value interface{}, recursive b array[i] = doMapConvertForMapOrStructValue(false, rvAttrField.Index(i), recursive, tags...) } dataMap[mapKey] = array - + case reflect.Map: + var ( + mapKeys = rvAttrField.MapKeys() + nestedMap = make(map[string]interface{}) + ) + for _, k := range mapKeys { + nestedMap[String(k.Interface())] = doMapConvertForMapOrStructValue( + false, + rvAttrField.MapIndex(k).Interface(), + recursive, + tags..., + ) + } + dataMap[mapKey] = nestedMap default: if rvField.IsValid() { dataMap[mapKey] = reflectValue.Field(i).Interface()