douchi0028 2018-04-27 19:28
浏览 639
已采纳

Golang将json值从int转换为字符串

I get json response. Which has key pk and it's value as int. I need to convert it as string, what is the easiest way? Here is the example

"pk": 145250410

and i need it to be

"pk": "145250410"

I can not make model, and parse it bacause i don't always know what will my json be like, but i know it will always have pk, so this is how i parse it.

var bdoc interface{}
bson.UnmarshalJSON([]byte(gjson.Get(*str, "user").String()), &bdoc)

The only problem is that i get pk as int not as string.

  • 写回答

1条回答 默认 最新

  • dongyue110702 2018-04-27 19:49
    关注
    package main
    
    import (
        "encoding/json"
    
        "fmt"
        "strconv"
    )
    
    var jsonData = []byte(`
    {
        "user": {
            "media_count": 2043,
            "follower_count": 663,
            "following_count": 1300,
            "geo_media_count": 0,
            "is_business": false,
            "usertags_count": 423,
            "has_chaining": true,
            "is_favorite": false,
            "has_highlight_reels": true,
            "include_direct_blacklist_status": true,
            "pk": 145250410,
            "username": "karahray",
            "full_name": "K Ray \ud83d\udd35",
            "has_anonymous_profile_picture": false,
            "is_private": false,
            "is_verified": false,
            "profile_pic_url": "",
            "profile_pic_id": "1403809308517206571_145250410",
            "biography": "Austinite, oncology dietitian, lover of food, coffee, beer, scenic jogs, traveling, Los Spurs, my Yorkies and LAUGHING! Fitness/food @LGFTatx!",
            "external_url": "",
            "hd_profile_pic_url_info": {
                "height": 1080,
                "url": "",
                "width": 1080
            },
            "hd_profile_pic_versions": [{
                "height": 320,
                "url": "",
                "width": 320
            }, {
                "height": 640,
                "url": "",
                "width": 640
            }], 
            "reel_auto_archive": "on",
            "school": null,
            "has_unseen_besties_media": false,
            "auto_expand_chaining": false
        },
        "status": "ok"
    }`)
    
    
    // custom json unmarshal
    type pk string
    
    func (p *pk) UnmarshalJSON(data []byte) error {
        var tmp int
        if err := json.Unmarshal(data, &tmp); err != nil {
            return err
        }
        *p = pk(strconv.Itoa(tmp))
        return nil
    }
    
    type jsonModel struct {
        User struct {
            PK pk `json:"pk"`
        } `json:"user"`
    }
    
    func main() {
        // using the custom json unmarshal
        jm := &jsonModel{}
        if err := json.Unmarshal(jsonData, jm); err != nil {
            panic(err)
        }
    
        // doing it as map[string]interface, then finding the key, 
        // then converting - you end up needing TONS of casting 
        everything := map[string]interface{}{}
        if err := json.Unmarshal(jsonData, &everything); err != nil {
            panic(err)
        }
    
        var userPart interface{}
        userPart, ok := everything["user"]
        if !ok {
            panic("could not find user key")
        }
        userPartMap := userPart.(map[string]interface{})
        var pkInterface interface{}
    
        if pkInterface, ok = userPartMap["pk"]; !ok {
            panic("could not find pk key")
        }
    
        // note that json is going to 'guess' float64 here, so we 
        // need to do a lot of shenanigans.
        pkString := strconv.FormatInt(int64(pkInterface.(float64)),10)
    
        fmt.Printf("%s
    ", jm.User.PK)
        fmt.Printf("%s
    ", pkString)
    
    
    }
    

    Output:

    145250410

    145250410

    https://play.golang.org/p/OfHi0ybHJXE

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格