使用json编码/解码结构时,几乎所有的代码都使用相同的字段名称,但是小写的首字母,为什么会这样?
由于名称相同,并且json当然可以适用于任何情况,为什么要添加这个重复的东西:
Name string `json:"name"`
为什么不使用Name string
?在其他情况下,如果名称与go字段名称不同,则添加格式字符串是有意义的:
Name string `json:"MyName"`
答案 0 :(得分:4)
每个struct字段的编码可以通过struct field标记中“json”键下存储的格式字符串进行自定义。格式字符串给出了字段的名称,可能后跟逗号分隔的选项列表。名称可以为空,以便指定选项而不覆盖默认字段名称。
应用程序在标记中指定小写名称以在JSON中生成小写名称。
此结构
type Example struct {
Name1 string
Name2 string `json:"name1"`
}
编码为:
{
"Name1": "1",
"name1": "2"
}
JSON只要求字段名称是有效字符串。 JSON中不需要小写名称。也就是说,在JSON中使用小写字母启动字段名称是很常见的做法。
答案 1 :(得分:1)
Name string `json:"name" db:"SomeName"`
请记住,用于调整de / serialization的字符串json:"name" db:"Name"
可以在json或数据库中。
用于命名它取决于输出。如果数据库字段为SomeName
,则必须定义db SomeName
。
所以我的问题是为什么几乎所有应用程序都想使用小写?
如果您遇到使用仅使用小写的输出json的源代码,这显然是为了保持一致性输出。
如果变量的小写也会产生不同的效果,对于小写充当private
变量,大写充当public
变量,因此可以通过包访问。
答案 2 :(得分:1)
使用json编码/解码结构时,几乎所有的代码都使用相同的字段名称,但是小写的首字母,为什么会这样?
因为JavaScript传统上/优先使用camelCase来表示变量和函数名称,所以JSON(源自JavaScript世界)自然也是如此。
当然,这不是强制执行标准,而且有许多竞争标准。但问题是为什么这是常见的,这似乎是最可能的答案。
当然,您可以自由地使用任何JSON密钥名称的套管系统,并且您肯定会在真实软件中找到任何套管系统(包括缺少系统)的示例。