in utils/json.go [27:62]
func MergeObject(old interface{}, new interface{}) interface{} {
if new == nil {
return new
}
switch oldValue := old.(type) {
case map[string]interface{}:
if newMap, ok := new.(map[string]interface{}); ok {
res := make(map[string]interface{})
for key, value := range oldValue {
if _, ok := newMap[key]; ok {
res[key] = MergeObject(value, newMap[key])
} else {
res[key] = value
}
}
for key, newValue := range newMap {
if res[key] == nil {
res[key] = newValue
}
}
return res
}
case []interface{}:
if newArr, ok := new.([]interface{}); ok {
if len(oldValue) != len(newArr) {
return newArr
}
res := make([]interface{}, 0)
for index := range oldValue {
res = append(res, MergeObject(oldValue[index], newArr[index]))
}
return res
}
}
return new
}