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  }