我有一个map[string]map[string]map[string]interface{}
类型的映射,我想创建以下类型的结构:
type Item struct {
Name string,
Id string,
Items []Item
}
由于地图的深度会随着时间变化,因此我试图使用递归来创建Item列表。
items := make([]Items, 0, 5)
for key, value := range resp {
//Where resp is the map of the type map[string]map[string]map[string]interace{}
tempMap := make(map[string]interface{})
tempMap[key] = value
items = buildItems(tempMap, names) //Names would be the function which would take the Id and set the name
}
func buildItems(items map[string]interface{}, names ) []Items {
result := make([]Items, 0, 10)
for parent, children := range items {
item := names(parent, names)
if children != nil {
//The Problem
item.Items = buildItems(children, names)
}
}
return result
}
问题 1.为了让我调用buildItems,我需要将项目设置为map [string] interface {},为此,我需要知道需要另一个for循环的下一个键 2.我不确定返回父母的正确方法是什么,等等
示例响应可能类似于
0566146
605679
6056
<nil>
60566
606
<nil>
6056614
606584
<nil>
60653
606536
6109
<nil>
60784
<nil>
61099
<nil>
6065
6112
<nil>
61129
<nil>
6078
<nil>
6084
<nil>
61097
<nil>
6108
<nil>
6110
<nil>
61099
<nil>
60675
606756
60722
<nil>
6096
<nil>
609705
<nil>
60773
<nil>