The question is asking for fields to be dynamically selected based on the caller-provided list of fields. This isn’t possible to be done with the statically-defined json struct tag.
If what you want is to always skip a field to json-encode, then of course use json:"-" to ignore the field. (Note also that this is not required if your field is unexported; those fields are always ignored by the json encoder.) This isn’t what the question asks.
To quote the comment on the json:"-" answer:
This [the
json:"-"answer] is the answer most people ending up here from searching would want, but it’s not the answer to the question.
I’d use a map[string]interface{} instead of a struct in this case. You can easily remove fields by calling the delete built-in on the map for the fields to remove.
That is, if you can’t query only for the requested fields in the first place.