Go语言如何将JSON中int类型的pk值转为string类型?
解决方法:解析后手动转换pk字段类型
这问题我碰到过,其实最简单的办法就是解析完成后直接修改那个interface{}里的pk值就行——因为bson.UnmarshalJSON解析JSON对象后,会返回一个map[string]interface{}类型的数据,咱们可以直接做类型断言然后修改字段。
具体代码实现如下:
import ( "fmt" "go.mongodb.org/mongo-driver/bson" ) // 你的原有解析逻辑 var bdoc interface{} err := bson.UnmarshalJSON([]byte(gjson.Get(*str, "user").String()), &bdoc) if err != nil { // 这里处理解析错误,比如打日志或返回错误 return } // 将bdoc断言为map[string]interface{}(因为user是JSON对象结构) userMap, ok := bdoc.(map[string]interface{}) if !ok { // 处理异常情况:如果user不是对象类型(比如是数组) return } // 找到pk字段并转换为string类型 if pkValue, exists := userMap["pk"]; exists { // 用fmt.Sprintf把任意数字类型转成字符串,原类型是int完全适用 userMap["pk"] = fmt.Sprintf("%v", pkValue) }
为什么这个方法最直接?
bson.UnmarshalJSON解析JSON对象时,默认会映射为map[string]interface{},只要你确定user是对象结构,类型断言就是安全的。- 不管
pk原本是int还是其他数字类型,fmt.Sprintf("%v", pkValue)都能稳定转成对应的字符串形式,完全满足需求。
如果你的场景需要频繁修改JSON字段,也可以试试sjson(gjson的姐妹库)在解析前先修改pk类型,但上面的方法不需要额外引入依赖,是最轻量化的解决方案。
内容的提问来源于stack exchange,提问作者Miljan Rakita
相关产品推荐
相关产品推荐

