当前位置: 首页 > 面试题库 >

从结构中删除字段或将其隐藏在JSON响应中

蔡理
2023-03-14
问题内容

我已经在Go中创建了一个API,该API在被调用后会执行查询,创建一个结构实例,然后将该结构编码为JSON,然后再发送回调用方。我现在想允许调用者通过传递“
fields” GET参数来选择他们想要返回的特定字段。

这意味着根据字段值,我的结构将发生变化。有什么方法可以从结构中删除字段?或者至少将它们动态隐藏在JSON响应中?(注意:有时我有空值,因此JSON
omitEmpty标记在这里不起作用)如果以上两种方法都不可行,是否有更好的处理方法的建议?提前致谢。

我正在使用的结构的较小版本如下:

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

然后,我像这样编码和输出响应:

err := json.NewEncoder(c.ResponseWriter).Encode(&msg)

问题答案:

编辑:我注意到一些不赞成票,并再次查看了此问答。大多数人似乎错过了OP要求根据呼叫者提供的字段列表 动态
选择字段的想法。您不能使用静态定义的json struct标记执行此操作。

如果你想要的是 总是 跳过场JSON编码,那么当然使用json:"-"忽略场(也注意到,这是 不是 如果你的领域不导出必需的-
这些领域始终由JSON编码器忽略)。但这不是OP的问题。

引用对json:"-"答案的评论:

这个[ json:"-"答案]是大多数到这里搜索的人都想要的答案,但这不是问题的答案。

在这种情况下,我将使用map [string] interface {}而不是结构。您可以通过调用delete地图上的内置字段来轻松删除字段。

也就是说,如果您不能仅首先查询所请求的字段。



 类似资料:
  • 问题内容: 在.NET Core 1.0(所有API响应)的全局级别上,如何配置Startup.cs,以便在JSON响应中删除/忽略空字段? 使用Newtonsoft.Json,您可以将以下属性应用于属性,但我希望避免将其添加到每个属性中: 问题答案: [.NET Core 1.0] 在Startup.cs中,可以将JsonOptions附加到服务集合,并在其中设置各种配置,包括删除空值: [.N

  • 我用的是Jackson和spring Boot。我有要求显示/隐藏相同的响应/基于控制器的请求模型的文件。例如,对于controllerA,我需要显示字段,而对于controllerB,我需要隐藏它。在两个控制器中使用的模型是相同的。我尝试使用@jsonview,但它给大摇大摆的文档带来了问题。请帮忙

  • 嗨,我是ElasticSearch的新手,我正在努力从ElasticSearch的响应中删除所有额外字段。请参见以下回复: 上面你可以看到响应中有一些附加字段,如_index、_type、_score、max_score等。我按照ElasticSearchresponse_filtering指南删除了这些字段,但对我不起作用。我还将filter_path参数传递给请求0.0.0.0:5000/v4

  • 如果我们有如下查询 返回预期的结果(如下所示) 正如您所看到的,查询是针对和我们希望从结果中排除其他字段,但只包括和的字段 并排除其他字段,例如,以下是一些不是或(传递到查询中的字段)的字段-从

  • 问题内容: 如何在Android HoneyComb中隐藏或删除状态栏?每次运行应用程序时,我都会发现状态栏必须覆盖一些内容。 我已尝试更改,但没有任何更改。 问题答案: 你不知道 与电容式家庭/菜单/等相同,它被认为是永久性的屏幕装饰。Android手机触摸屏下方的按钮。 您如何衡量可用于内容的空间?

  • 问题内容: 我想知道是否可以将return json存储在隐藏的输入字段中。例如,这是我的json返回的内容: 我只想将ID存储在一个隐藏字段中,以便以后可以引用它来做一些事情。 示例:我有这样的事情: 并希望jQuery稍后将值返回给我,如下所示: 问题答案: 您可以将其存储在隐藏字段中,也可以将其存储在javascript对象(我的偏好)中,因为可能的访问方式是通过javascript。 注意