首页 > 解决方案 > 在go中编码json标签

问题描述

我正在尝试更改 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中完成吗?

标签: jsongomarshalling

解决方案


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

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

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

将修改后的地图再次马歇尔


推荐阅读