1 回答

TA貢獻1876條經驗 獲得超7個贊
如果您事先不知道這些字段,則不要使用結構,而是使用同樣“動態”的東西:地圖。
type Service struct {
Resources []struct {
Model struct {
Name string `json:"name"`
Credentials struct {
Path string `json:"path"`
Vts map[string]interface{} `json:"vts"`
} `json:"credentials"`
} `json:"model"`
} `json:"resources"`
}
map[sting]interface{}可以保存任何類型的值。如果您知道所有字段都將保存一個string值,您也可以使用 amap[string]string以便更容易地使用它。
輸入 JSON 的示例:
{
"resources": [
{
"model": {
"name": "cred",
"credentials": {
"path": "path in fs",
"vts": {
"user": "stephane",
"id": "123",
"address": "some address",
"dyn1": "d1value",
"dyn2": "d2value"
}
}
}
}
]
}
測試它:
service := Service{}
err := json.Unmarshal([]byte(data), &service)
fmt.Printf("%q %v", service, err)
輸出(在Go Playground上嘗試):
{[{{"cred" {"path in fs" map["dyn2":"d2value" "user":"stephane" "id":"123"
"address":"some address" "dyn1":"d1value"]}}}]} <nil>
現在,如果你想從Vts映射中收集一組鍵的值,你可以這樣做:
args := []string{"dyn1", "dyn2"}
values := make([]interface{}, len(args))
for i, arg := range args {
values[i] = service.Resources[0].Model.Credentials.Vts[arg]
}
fmt.Println(values)
上面的輸出將是(在Go Playground上試試):
[d1value d2value]
- 1 回答
- 0 關注
- 134 瀏覽
添加回答
舉報