我正在尝试更改 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/