带有JSON和Golang的无限结构



我不知道如何用Golang来解组这种JSON结构。我从一个REST API得到响应。键是动态的,嵌套的键和值也是动态的。。

{"key1":{"col1":"Data11","col2":"Data12","col3":"Data13","col4":"Data14"},
"key2":{"col1":"Data21","col2":"Data22","col3":"Data23","col4":"Data24"},
"key3":{"col1":"Data31","col2":"Data32","col3":"Data33","col4":"Data34"},
"key4":{"col1":"Data41","col2":"Data42","col3":"Data43","col4":"Data44"},
"key5":{"col1":"Data51","col2":"Data52","col3":"Data53","col4":"Data54"},
"key6":{"col1":"Data61","col2":"Data62","col3":"Data63","col4":"Data64"}}

我试过JsonToStruct,很明显我得到了这个:

type AutoGenerated struct {
Key1 struct {
Col1 string `json:"col1"`
Col2 string `json:"col2"`
Col3 string `json:"col3"`
Col4 string `json:"col4"`
} `json:"key1"`
Key2 struct {
Col1 string `json:"col1"`
Col2 string `json:"col2"`
Col3 string `json:"col3"`
Col4 string `json:"col4"`
} `json:"key2"`
Key3 struct {
Col1 string `json:"col1"`
Col2 string `json:"col2"`
Col3 string `json:"col3"`
Col4 string `json:"col4"`
} `json:"key3"`
Key4 struct {
Col1 string `json:"col1"`
Col2 string `json:"col2"`
Col3 string `json:"col3"`
Col4 string `json:"col4"`
} `json:"key4"`
Key5 struct {
Col1 string `json:"col1"`
Col2 string `json:"col2"`
Col3 string `json:"col3"`
Col4 string `json:"col4"`
} `json:"key5"`
Key6 struct {
Col1 string `json:"col1"`
Col2 string `json:"col2"`
Col3 string `json:"col3"`
Col4 string `json:"col4"`
} `json:"key6"`
}

但我不知道我将在响应中得到的密钥的名称,所以我需要一个通用的解组。我被卡住了。

您需要将数据分解为map[string]map[string]字符串,如下所示:

jsonData:="{"key1":{"col1":"Data11","col2":"Data12","col3":"Data13","col4":"Data14"}, "key2":{"col1":"Data21","col2":"Data22","col3":"Data23","col4":"Data24"}, "key3":{"col1":"Data31","col2":"Data32","col3":"Data33","col4":"Data34"}, "key4":{"col1":"Data41","col2":"Data42","col3":"Data43","col4":"Data44"}, "key5":{"col1":"Data51","col2":"Data52","col3":"Data53","col4":"Data54"}, "key6":{"col1":"Data61","col2":"Data62","col3":"Data63","col4":"Data64"}}"
var jsonObject map[string]map[string]string
json.Unmarshal([]byte(jsonData),&jsonObject)
for k:=range jsonObject{
fmt.Println(k ," has " , len(jsonObject[k]) , " fields")
for j:=range jsonObject[k]{
fmt.Println(j , "=",jsonObject[k][j] )
}
}

最新更新