You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:10:48