Stworzyłem API w Go, które po wywołaniu wykonuje zapytanie, tworzy instancję struktury, a następnie koduje tę strukturę jako JSON przed wysłaniem z powrotem do dzwoniącego. Chciałbym teraz pozwolić wywołującemu na wybranie określonych pól, które chcieliby zwrócić, przekazując parametr GET „pola”.
Oznacza to, że w zależności od wartości pól moja struktura uległaby zmianie. Czy istnieje sposób na usunięcie pól ze struktury? Lub przynajmniej dynamicznie ukryć je w odpowiedzi JSON? (Uwaga: czasami mam puste wartości, więc tag JSON omitEmpty nie będzie działał w tym miejscu). Jeśli żadne z powyższych nie jest możliwe, czy istnieje sugestia dotycząca lepszego sposobu rozwiązania tego problemu? Z góry dziękuję.
Poniżej znajduje się mniejsza wersja struktur, których używam:
type SearchResult struct {
Date string `json:"date"`
IdCompany int `json:"idCompany"`
Company string `json:"company"`
IdIndustry interface{} `json:"idIndustry"`
Industry string `json:"industry"`
IdContinent interface{} `json:"idContinent"`
Continent string `json:"continent"`
IdCountry interface{} `json:"idCountry"`
Country string `json:"country"`
IdState interface{} `json:"idState"`
State string `json:"state"`
IdCity interface{} `json:"idCity"`
City string `json:"city"`
} //SearchResult
type SearchResults struct {
NumberResults int `json:"numberResults"`
Results []SearchResult `json:"results"`
} //type SearchResults
Następnie koduję i wyprowadzam odpowiedź w następujący sposób:
err := json.NewEncoder(c.ResponseWriter).Encode(&msg)