У меня есть следующие структурыКак проверить наличие ключа в вложенной структуры
type GiphyJson struct {
Type string `json:"type"`
Data []struct {
Images struct {
Fixed_height struct {
Url string `json:"url"`
} `json:"fixed_height"`
} `json:"images"`
} `json:"data"`
}
и мне нужно, чтобы получить доступ Data[x].Images.Fixed_height.Url
. В идеале я хотел бы проверить наличие каждой из «Свойства данных», «Изображения», «Исправлена» перед доступом к Url, чтобы убедиться, что у меня нет исключений указателей на nil. Поскольку я довольно новичок в языке, мне было любопытно, каким будет идиоматический способ сделать это.
Ниже описано, как я использую структуру.
var err error
var giphyJson GiphyJson
keyword = url.QueryEscape(keyword)
resp, err := http.Get("http://api.giphy.com/v1/gifs/search?q=" + keyword + "&api_key=dc6zaTOxFJmzC&limit=100")
if err != nil {
err = errors.New("An error occured trying to contact giphy")
return "", err
}
defer resp.Body.Close()
bodyBytes, err := ioutil.ReadAll(resp.Body)
err = json.Unmarshal(bodyBytes, &giphyJson)
Ответ зависит исключительно от типа, в который вы размонтируете свой JSON. Например. если структура struct не содержит указателей, то исключение исключений nil не может быть. Пожалуйста, покажите код. – Volker
@ Волкир не так, что определение структур? У него нет указателей ... на OP, единственное, что вам действительно нужно проверить, это то, что 'lenght (Data)> x' – evanmcdonnal
В вышеприведенной структуре вы должны проверить, что len (data)> 0; Изображения, Fixed_height и Url всегда будут иметь значения (даже если они не существуют в JSON, они будут инициализированы до нулевого значения в структуре). –