Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从结构中删除字段或将其隐藏在JSON响应中

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

Stack Overflow用户
提问于 2013-06-25 19:56:20
回答 8查看 191.1K关注 0票数 229

我在Go中创建了一个API,它在被调用时执行查询,创建一个结构的实例,然后在发送回调用者之前将该结构编码为JSON。现在,我想让调用者能够通过传递一个“field”GET参数来选择他们想要返回的特定字段。

这意味着根据字段值的不同,我的结构也会发生变化。有什么方法可以从结构中删除字段吗?或者至少将它们动态地隐藏在JSON响应中?(注意:有时我有空值,所以JSON omitEmpty标记在这里不起作用)如果这两个都不可能,有没有更好的处理方法的建议?

下面是我正在使用的结构的一个较小版本:

代码语言:javascript
运行
AI代码解释
复制
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

然后对响应进行编码并输出,如下所示:

代码语言:javascript
运行
AI代码解释
复制
err := json.NewEncoder(c.ResponseWriter).Encode(&msg)
EN

回答 8

Stack Overflow用户

发布于 2014-03-28 07:46:32

使用json:"-"

代码语言:javascript
运行
AI代码解释
复制
// Field is ignored by this package.
Field int `json:"-"`

// Field appears in JSON as key "myName".
Field int `json:"myName"`

// Field appears in JSON as key "myName" and
// the field is omitted from the object if its value is empty,
// as defined above.
Field int `json:"myName,omitempty"`

// Field appears in JSON as key "Field" (the default), but
// the field is skipped if empty.
// Note the leading comma.
Field int `json:",omitempty"`

文档:http://golang.org/pkg/encoding/json/#Marshal

票数 187
EN

Stack Overflow用户

发布于 2017-01-26 18:53:09

我刚刚发布了sheriff,它根据结构字段上注释的标记将结构转换为映射。然后,您可以编组(JSON或其他)生成的映射。它可能不允许您只序列化调用者请求的字段集,但我想使用一组组将允许您涵盖大多数情况。使用组而不是直接使用字段也很可能会增加缓存能力。

示例:

代码语言:javascript
运行
AI代码解释
复制
package main

import (
    "encoding/json"
    "fmt"
    "log"

    "github.com/hashicorp/go-version"
    "github.com/liip/sheriff"
)

type User struct {
    Username string   `json:"username" groups:"api"`
    Email    string   `json:"email" groups:"personal"`
    Name     string   `json:"name" groups:"api"`
    Roles    []string `json:"roles" groups:"api" since:"2"`
}

func main() {
    user := User{
        Username: "alice",
        Email:    "alice@example.org",
        Name:     "Alice",
        Roles:    []string{"user", "admin"},
    }

    v2, err := version.NewVersion("2.0.0")
    if err != nil {
        log.Panic(err)
    }

    o := &sheriff.Options{
        Groups:     []string{"api"},
        ApiVersion: v2,
    }

    data, err := sheriff.Marshal(o, user)
    if err != nil {
        log.Panic(err)
    }

    output, err := json.MarshalIndent(data, "", "  ")
    if err != nil {
        log.Panic(err)
    }
    fmt.Printf("%s", output)
}
票数 9
EN

Stack Overflow用户

发布于 2013-06-26 07:46:16

你可以使用标签属性"omitifempty“,或者将可选字段设为指针,而不初始化那些你想跳过的字段。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17306358

复制
相关文章
MySQL中的json字段
MySQL5.7.8中引入了json字段,这种类型的字段使用的频率比较低,但是在实际操作中,有些业务仍然在用,我们以此为例,介绍下json字段的操作方法:
AsiaYe
2019/12/23
9.3K0
Actframework中如何灵活控制JSON响应
@DiamondFsd 昨天写了一篇关于如何在Spring MVC中灵活控制JSON返回的博客,其中@JSON注解的思路和我在actframework的处理方式非常相似。 刚好昨天把actframework放上码云了,就这个话题写下 如何在ActFramework中控制JSON返回 首先是资源和服务。我将就@DiamondFsd的article的例子来做讲解 @Entity("article") public class Article extends MorphiaAdaptiveRecord<Artic
老码农
2018/06/27
1K0
从DataFrame中删除列
在操作数据的时候,DataFrame对象中删除一个或多个列是常见的操作,并且实现方法较多,然而这中间有很多细节值得关注。
老齐
2021/03/29
7.6K0
从lvm中删除硬盘、分区
本文由腾讯云+社区自动同步,原文地址 https://stackoverflow.club/article/remove_disk_from_lvm/
羽翰尘
2019/11/20
7.2K0
通过 MongoTemplate 按ID或其他字段删除
翟凤玺
2023/10/19
6490
藏在白酒行业中的猛兽
某高端白酒黄牛价又双叒叕涨价了。 几个月前还能用2000块钱拿下的一瓶酒,如今已经涨破了2400元大关。一方面,官方渠道上明码标价一千多元/瓶的某白酒常年断货,而另一面,黄牛却货源充足,肆意推高卖价,试图将利润越炒越高。 最终,局势进入了一个“越贵越难买,越难买越贵”的怪圈。 在这个怪圈的背后到底发生了什么? 这就要先来聊一聊黄牛的看家本领——囤酒。 从雇人排队到人肉众包,黄牛走过的那些年 黄牛囤酒不是什么黑科技。 从实体店开始,黄牛就懂得用雇人排队的方式来应对限购。电商兴起后,账号代替了真人名额,也给这
腾讯云安全
2019/05/16
6220
藏在白酒行业中的猛兽
删除或关闭Word中的超链接
最近使用的word老是会把一些文字内容或者标题转换成乱七八糟的格式,看的莫名其妙的,找了好久也不知道什么问题,后来一查才知道是因为这些文字包含超链接,word自动转换了。。。你说是不是莫名其妙。
marsggbo
2019/05/26
2.7K0
tr - 转换或删除文件中的字符
# 把文件中的所有小字字母都转换成大写字母 tr "a-z" "A-Z" < /etc/passwd # 删除字符中所有出现的ab tr -d "ab" # 多行合并一行,并添加分割符 cat /etc/passwd | tr "\n" " "
陳斯托洛夫斯記
2022/10/27
1.6K0
VC中CTreeContrl实现响应单击或双击事件
首先需要重写CtreeContrl,然后在.h中添加 afx_msg void OnDblClkTree(NMHDR* pNMHDR, LRESULT* pResult);//双击事件 afx_msg void OnClkTree(NMHDR* pNMHDR, LRESULT* pResult);//单击事件 .h文件 #pragma once ///////////////////////////////////////////////////////////////////////////// //
acoolgiser
2019/01/17
1.9K0
从Git仓库中恢复已删除的分支、文件或丢失的commit
比如:执行checkout -f 或 reset -hard 或 branch -d删除一个分支
用户8705050
2021/06/08
3.7K0
hive 中 统计某字段json数组中每个value出现的次数
需要将json数组里的qd_title都提取出来转换成hive中的array数组。下面介绍两种方法
Meet相识
2018/09/12
10.8K1
如何从JavaScript对象中删除属性?
在使用 JavaScript 中的对象时,你可能会遇到需要从对象中完全删除属性的情况。为实现这一点可以有好几个选择:
疯狂的技术宅
2021/04/01
13K0
如何从组中删除Linux用户?
在Linux中,用户可以是一个主要组和一个或几个次要(辅助)组的成员。文件“ / etc / group”为Linux系统中的每个用户定义了组成员身份。
用户6543014
2020/04/07
20.2K0
从 git 的历史记录中彻底删除文件或文件夹
如果你对外开源的代码中出现了敏感信息(例如你将私钥上传到了仓库中),你可能需要考虑将这个文件从 git 的历史记录中完全删除掉。
walterlv
2023/10/22
1K0
Python - 从字典列表中删除字典
字典是python的一个非常常用的功能,用于根据用户需要在其中存储数据。另一个典型的过程涉及编辑或操作此数据。要成为一名高效且快速的程序员,您必须弄清楚如何从字典列表中删除字典。有许多技术可以从词典列表中删除字典,本文将介绍这些技术。
很酷的站长
2023/08/11
8390
Python - 从字典列表中删除字典
根据一个属性,剔除 Json 中重复元素(删除 JSON 中重复的部分)
如上有一个类似这样 json :JsonContext,主要是描述多个 user 的相关信息。
微风-- 轻许--
2022/04/13
4.1K0
隐藏在PC轴中的秘密
正常情况下,按照目前主流的单细胞数据分析教程,是可以分析我们的数据的。但是,如果在分析过程中发现了不正常的现象,比如,batch这个幽灵真的在脑海里盘旋不去,我们就要检查batch的来源了。
生信技能树jimmy
2020/11/25
6160
隐藏在PC轴中的秘密
如何从Ubuntu Linux中删除Firefox Snap?
Ubuntu Linux是一款广受欢迎的开源操作系统,拥有强大的功能和广泛的应用程序选择。默认情况下,Ubuntu提供了一种称为Snap的软件打包格式,用于安装和管理应用程序。Firefox是一款流行的开源网络浏览器,而Firefox Snap是Firefox的Snap版本。
网络技术联盟站
2023/05/25
5.5K0
如何从Ubuntu Linux中删除Firefox Snap?
[LEETCODE]从排序数组中删除重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
用户2353021
2020/05/11
6.7K0
点击加载更多

相似问题

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

120

从JSON响应中删除字段

12

如何从json响应中动态删除字段?

11

如何从Laravel JSON Api响应中删除字段

20

从结构中删除字段,转换结构

111
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档