gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/datax/mapx/export.go (about) 1 package mapx 2 3 import "gitee.com/zhongguo168a/gocodes/datax" 4 5 // 输出指定字段 6 func ExportField(source, fieldMap datax.M) (r datax.M) { 7 r = datax.M{} 8 toMapByField(source, fieldMap, r) 9 return r 10 } 11 12 func toMapByField(data, fieldMap datax.M, r datax.M) { 13 for field, fieldValue := range fieldMap { 14 dataVal := data[field] 15 switch v := dataVal.(type) { 16 case datax.M: 17 if v != nil { 18 tm := datax.M{} 19 r[field] = tm 20 if fieldValue == nil { 21 Copy(v, tm) 22 } else { 23 toMapByField(v, fieldValue.(datax.M), tm) 24 } 25 } else { 26 r[field] = nil 27 } 28 default: 29 r[field] = v 30 } 31 } 32 return 33 } 34 func toMapByData(data, fieldMap datax.M, r datax.M) { 35 for field, fieldValue := range fieldMap { 36 dataVal := data[field] 37 switch v := dataVal.(type) { 38 case datax.M: 39 if v != nil { 40 tm := datax.M{} 41 r[field] = tm 42 if fieldValue == nil { 43 } else { 44 toMapByField(v, fieldValue.(datax.M), tm) 45 } 46 } else { 47 r[field] = nil 48 } 49 default: 50 r[field] = v 51 } 52 } 53 return 54 }