JSON 응답의 동적 필드 선택
Go에서는 구조체에서 JSON 데이터를 반환하는 API를 생성할 수 있습니다. 일반적인 요구 사항은 호출자가 반환하려는 특정 필드를 선택할 수 있도록 허용하는 것입니다. 그러나 정적으로 정의된 JSON 구조체 태그는 동적 필드 선택을 지원하지 않습니다.
JSON으로 필드 숨기기
가능한 해결 방법 중 하나는 json:"-" 태그를 사용하는 것입니다. 인코딩 중에 특정 필드를 건너뛰려면 그러나 이는 항상 제외되는 정적으로 정의된 필드에만 적용됩니다. 동적 필드 선택의 필요성을 해결하지 않습니다.
동적 필드 제거
더 유연한 접근 방식은 구조체 대신 map[string]인터페이스{}를 사용하는 것입니다. . 이를 통해 지도에서 삭제 기능을 사용하여 필드를 동적으로 제거할 수 있습니다. 이 접근 방식은 처음에 요청된 필드만 쿼리할 수 없을 때 특히 유용합니다.
예:
import ( "encoding/json" "fmt" "net/http" ) type SearchResult struct { Date string IdCompany int Company string IdIndustry interface{} Industry string ... // other fields } type SearchResults struct { NumberResults int `json:"numberResults"` Results []SearchResult `json:"results"` } func main() { http.HandleFunc("/search", func(w http.ResponseWriter, r *http.Request) { // Get requested fields from query parameter fields := r.URL.Query()["fields"] results := SearchResults{ // Populate results... } // Remove unwanted fields from each result for i := range results.Results { for _, field := range fields { delete(results.Results[i], field) } } // Encode and output response err := json.NewEncoder(w).Encode(&results) if err != nil { http.Error(w, "Error encoding response", http.StatusInternalServerError) } }) }
이 예에서 fields 매개변수는 다음과 같습니다. JSON으로 인코딩하기 전에 SearchResult 구조체에서 필드를 동적으로 제거하는 데 사용됩니다. 이 접근 방식을 사용하면 발신자 기본 설정에 따라 유연한 필드 선택이 가능합니다.
위 내용은 Go JSON 응답에서 동적 필드 선택을 어떻게 구현할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!