我刚刚将 Go 项目新迁移到使用 GORM,我想为模型结构设置全局配置以自动使用驼峰命名法作为 json 数据。
工作.去
type Job struct {
ID uint
Title string
JobContent string `json:"jobContent"`
}
var data Job
db.First(&data)
JSON 结果将是:
{
"ID": 1,
"Title": "some title",
"jobContent": "this is a content"
}
// 我想自动将所有 json 结果设置为驼峰命名法, // 无需在所有结构体属性中手动指定:
预期输出:
{
"id": 1,
"title": "some title",
"jobContent": "this is a content"
}
为所有struct属性设置json字段有点麻烦,我想知道如何全局设置以自动将json数据显示为camelCase?
GORM 有自己的处理 JSON 序列化的方式,并且它可能不直接支持开箱即用的 JSON 字段名称自动驼峰式转换。为了实现所需的行为,您可能需要手动指定每个字段的 JSON 标签或为每个模型编写自定义封送处理函数。
以下是为 Job 结构手动指定 JSON 标签的示例:
package main
import (
"gorm.io/gorm"
)
type Job struct {
ID uint `json:"id"`
Title string `json:"title"`
JobContent string `json:"jobContent"`
}
通过显式指定如上所示的 JSON 标签,您可以控制 JSON 字段名称采用驼峰格式。
如果您想自动将所有字段名称转换为驼峰命名法,您可能需要为每个模型编写自定义封送处理代码,因为 GORM 不提供内置机制来为所有模型全局执行此操作。这将涉及编写一个自定义函数,以使用驼峰命名法字段名称将结构编组为 JSON。
您还可以查看自定义序列化器:(未经测试的代码)
type CamelCaseSerializer struct{}
func (c CamelCaseSerializer) Serialize(v interface{}) map[string]interface{} {
s := schema.NamingStrategy{}
values := gorm.ToStruct(v, gorm.Dict{})
result := map[string]interface{}{}
for key, value := range values {
jsonKey := s.ColumnName("", key)
result[toCamelCase(jsonKey)] = value
}
return result
}