Go语言中JSON Marshal的小写JSON键值名

xzabzqsa  于 2023-01-10  发布在  Go
关注(0)|答案(4)|浏览(145)

我希望使用"encoding/json"包来封送在我的应用程序的一个导入包中声明的结构。
例如:

type T struct {
    Foo int
}

因为它是导入的,所以结构体中所有可用的(导出的)字段都以大写字母开头,但我希望键名称是小写的:

out, err := json.Marshal(&T{Foo: 42})

将导致
{"福":42}
但我希望
{" foo ":42}
有没有可能用一些简单的方法来解决这个问题?

nxowjjhe

nxowjjhe1#

请查看encoding/json.Marshal的文档,其中讨论了如何使用struct字段标记来确定生成的json的格式。
例如:

type T struct {
    FieldA int    `json:"field_a"`
    FieldB string `json:"field_b,omitempty"`
}

这将生成如下所示的JSON:

{
    "field_a": 1234,
    "field_b": "foobar"
}
9lowa7mx

9lowa7mx2#

你可以用你想要导出的键来创建自己的结构体,并给它们指定合适的json标签来表示小写名称,然后你可以在将其编码为JSON之前将所需的结构体复制到你的结构体中,或者如果你不想麻烦地创建一个本地结构体,你可以创建一个map[string]interface{}并对其进行编码。

xmakbtuz

xmakbtuz3#

我只想补充一点,你可以使用gopls自动生成这些标记,手工添加标记是一项繁重的任务,特别是对于大型json结构体,所以这个特性是一个节省时间的特性。
添加gopls langserver会因用户首选的编辑器而异。

go install golang.org/x/tools/gopls@latest

对于带有CoC的Neovim,您可以先:CocInstall coc-go,然后go.tags.add。有关CoC扩展的完整文档,请参见here

ncecgwcz

ncecgwcz4#

可以使用fatih/gomodifytags生成结构字段的json:"camelCase"标记。
例如:

$ gomodifytags -file main.go -struct T -add-tags json -transform camelcase -quiet -w

NB:您还可以使用-override覆盖现有标记。

相关问题