json - 在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中完成吗?
解决方案
将 json 解组为map[string]interface{}
编写一个函数,递归到map[string]interface
查找名为“name”的键
将这些键复制到同一映射中的“name@lang”,然后删除“name”键
将修改后的地图再次马歇尔
推荐阅读
- java - 如何在从cordova创建的本机代码中使用相同的android SQLite DB?
- android - Android:如何将一个触摸事件(onClick)从前台的视图传递到后台的另一个视图?
- javascript - 提交表单时页面重新加载
- cordova - 未安装最新版本的插件
- docker - 无法在 Docker 容器中连接 nlu
- jquery - 折叠时的引导子菜单
- java - 如何在 MANIFEST.MF 文件中包含 org.json.jar 和 org.json.* 导入
- python - pyqt中一串连续的复选框
- css - 为什么子元素角带有边框半径:继承;与父母的不一致
- elasticsearch - Elasticsearch 查询显示的数据多于它的数据