Marshal 和 Unmarshal 函数是否严格区分大小写?
以下结构定义了票证:
type TicketInfo struct {
TicketKey string `json:"ticketKey"`
Ticketextnum string `json:"ticketextnum"`
TicketDate string `json:"ticketDate"`
TicketDesc string `json:"ticketDesc"`
}
Run Code Online (Sandbox Code Playgroud)
此 json 的字符串化形式将作为源系统 API 调用有效负载中的单个参数传递。例如,如果源系统为第一个字段发送“TicketKey”而不是“ticketKey”会发生什么。json.Marshal 会正确接收到 ticketKey 字段吗?
这很容易通过阅读文档或简单的测试来回答。但具体来说,请参阅Marshal 的这些注释(强调):
结构值编码为 JSON 对象。每个导出的结构字段都成为对象的成员,使用字段名称作为对象键,除非由于下面给出的原因之一而省略了该字段。
每个 struct 字段的编码可以通过 struct 字段标签中“json”键下存储的格式字符串进行自定义。格式字符串给出了字段的名称,可能后跟逗号分隔的选项列表。该名称可以为空,以便在不覆盖默认字段名称的情况下指定选项。
与解组:
要将 JSON 解组为结构,Unmarshal 将传入的对象键与 Marshal 使用的键(结构字段名称或其标签)进行匹配,更喜欢精确匹配,但也接受不区分大小写的匹配。默认情况下,不具有相应结构字段的对象键将被忽略(请参阅 Decoder.DisallowUnknownFields 以获取替代方法)。
所以 TL; DR; 对于编组,大小写被精确观察,对于解组,精确大小写是首选,并回退到不区分大小写的匹配。
| 归档时间: |
|
| 查看次数: |
392 次 |
| 最近记录: |