json - 在 go 中编码 json 标签

标签 json go marshalling

我正在尝试更改 json 中的编码,并同时使用了 encoding/json 和 jsoniter。我想要完成的是,如果我提供一种语言,它会将相关字段名称编码为“name@lang”而不是“name”。我一直在尝试以下操作:

func registerFieldEncoder(field string) {
encoderFunc := func(p unsafe.Pointer, stream *jsoniter.Stream) {
    fmt.Print("test")
    str := *(*string)(unsafe.Pointer(p))
    newstr := str + "@sv"
    stream.WriteString(newstr)
}
isEmptyFunc := func(p unsafe.Pointer) bool {
    str := *(*string)(unsafe.Pointer(p))
    return len(str) == 0
}
jsoniter.RegisterTypeEncoderFunc(field, encoderFunc, isEmptyFunc)
jsoniter.RegisterFieldEncoderFunc("", field, encoderFunc, isEmptyFunc) }

字段代表json标签,即

`json:"field`

这有可能在 go 中完成吗?

最佳答案

将 json 解码为 map[string]interface{}

编写一个递归到 map[string]interface 中寻找名为“name”的键的函数

将这些键复制到同一个映射中的“name@lang”,然后删除“name”键

再次编码修改后的 map

关于json - 在 go 中编码 json 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53537850/

相关文章:

javascript - 在 jQuery mobile 中将 json 数据显示为列表

javascript - 为什么这个 JSON 文件读起来很奇怪

javascript - 使用 React TypeScript 进行本地化

Golang 和 NSQ(位)

c# - 使用 DllImport 将 C# byte[] 编码到 C++ DLL

spring - Jaxb 编码器和泛型(2)

java - 使用 Jackson 解析动态生成的 JSON 对象名称

go: 找不到 GOROOT 目录:c:\go

email - 如何使用 starttls 在 Go 中从交换服务器连接和发送电子邮件?

c++ - 使用 WM_COPYDATA 将结构从 C++ 发送到 WPF