为什么会生成空 JSON?
看例子,有这样一个 struct 类型 point,我想把他转化成 JSON 格式:
把 point struct 的变量转化成 JSON 格式
但输出结果是:{}
为什么会这样,难道是忘记添加 JSON tag 了?我们试试:
加上 JSON tag
这次,输出结果依然是:{}
为什么还是 {} ?
因为对于和 JSON 格式相互转化来说,JSON tag 不是必须的。默认没有 tag 的时候,JSON 的字段名和 struct 的字段名是一样的。
难道是因为 struct 类型没有导出?我们试试:
point 变成 Point 了
这里把 point 变成 Point 了。
但输出结果依然是:{}
所以,struct 是否导出与 JSON 的相互转化没有关系。
然而,目前 struct 里面定义的字段目前是没有导出的,把这些字段导出试试:
Point 的字段都导出了
终于,结果和我们预期一样了:{"X":3,"Y":2.5}。
所以,要想与 JSON 格式相互转换(Marshal 和 Unmarshal),struct 的字段就需要导出。
如何忽略某些字段?
有两种办法:

第一种方法,就是不要导出忽略的字段;
第二种方法,如果这些忽略的字段必须导出,为了忽略他们,我们可以使用一种特殊的 JSON tag:“-”(就是一个横线)。
例子:
使用 - tag 在 JSON 转换时忽略字段
其结果是:{"A":"a"}。
注意:这里 b 字段没有导出,而 C 字段使用了 - JSON tag。
综上
为了与 JSON 相互转换,struct 相关的字段需要被导出。
但是对类型是否导出,以及是否使用了 JSON tag 无关。
我们可以使用 “-” 这个特殊的 JSON tag 来忽略字段。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/167340.html