如何设置全局结构体属性自动显示为驼峰命名法

问题描述 投票:0回答:1

我刚刚将 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?

go go-gorm
1个回答
0
投票

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
}
© www.soinside.com 2019 - 2024. All rights reserved.