zhiruchen
7/14/2017 - 6:26 AM

golang flatten nested map

golang flatten nested map

type Data map[string]interface{}
func main() {
	var data Data
	data = Data{
		"A": 1,
		"B": 2,
		"C": Data{
			"D": 3,
			"E": 4,
			"G": Data{
				"H": 123,
				"Q": 456,
			},
		},
		"F":    5,
		"DATE": time.Now(),
	}

	newMap1 := flattenMap(data)
	log.Printf("%v\n", newMap1)
}

func flattenMap(m Data) Data {
	d := make(Data)
	for k, v := range m {
		v1, ok := v.(Data)
		if ok {
			flatMap(d, v1, k)
		} else {
			d[k] = v
		}
	}
	return d
}

func flatMap(d, m Data, oldKey string) {
	for k, v := range m {
		v1, ok := v.(Data)
		if ok {
			flatMap(d, v1, oldKey+"."+k)
		} else {
			d[oldKey+"."+k] = v
		}
	}
}