gpt4 book ai didi

go - 如何在 go gin 中修剪查询和 json 的空格?

转载 作者:行者123 更新时间:2023-12-05 05:50:19 26 4
gpt4 key购买 nike

我有一个这样的结构

type Data struct {
Foo string `json:"foo" binding:"required"`
}

我使用 ShouldBind 将查询或 json 主体绑定(bind)到结构。

data := Data{}
err := ctx.ShouldBind(&data)

我想知道修剪字符串字段空白的最佳做法是什么?

transform {"foo": "   bar   "} to struct {"foo": "bar"}
  • 我试过使用自定义字符串类型,并添加自定义 UnmarshalJSON 函数,但如果它是查询,它对 ctx.shouldBind 不起作用。
type Data struct {
Foo TrimSpaceString `json:"foo" binding:"required"`
}

type TrimSpaceString string

func (t *TrimSpaceString) UnmarshalJSON(data []byte) error {
data = bytes.Trim(data, "\"")
data = bytes.Trim(data, " ")
*t = TrimSpaceString(strings.TrimSpace(string(data)))
return nil
}
  • 我也试过使用 conform并为结构添加标签。但是我必须在绑定(bind)后添加 conform.Strings(data) ,这不方便。
type Data struct {
Foo TrimSpaceString `json:"foo" binding:"required" conform:"trim"`
}
err := ctx.ShouldBind(&data)
conform.Strings(&data)
  • 我应该自定义 Binding 并在 Binding 中修剪字符串吗?

最佳答案

我通过稍微修改 UnmarshalJSON 函数使它工作。我没有什么可解释的,因为我也是新手,但会尝试,不同之处在于我们正在通过 json.Unmarshal 将字节 data 转换为字符串。然后我们修剪字符串上的空格并将其附加到字段或原始字符串中

type trim string

func (t *trim) UnmarshalJSON(data []byte) error {
var s string
if err := json.Unmarshal(data, &s); err != nil {
return err
}
*t = trim(strings.TrimSpace(s))
fmt.Printf("these are the strings: '%s'\n", *t)
return nil
}

如果你想自己试试,这里就是 Playground https://go.dev/play/p/BuxvMQibVsn

关于go - 如何在 go gin 中修剪查询和 json 的空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70531574/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com