账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Golang 以 Json 形式返回 Php 序列化的数据
    28
    0

    问题描述

    初学 golang,基础尚薄弱,遇到问题,尝试在网上找了一些方法,但感觉始终在乱撞,没理出思路。

    项目用的是 golang,框架用的是 Echo。
    想取 redis 中的数据并以 json 的形式返回出来。
    redis 中的数据是经过 php 序列化的 json(另外的 Php 服务存储进来的),我先用 phpserialize.Decode ( github.com/wulijun/go-php-serialize/phpserialize )把从 redis 中取出的数据反序列化,然后用 JSON(200, data) 返回。

    redis 存储的数据是这个样子(json 整体作为一个字符串): s:36:"{"name":"xiaoming","nickname":"neo"}"

    但是在返回后,是以字符串的形式返回的。

    而我的期待是以 json 形式返回出来。

    还请不吝赐教。

    相关代码

    main.go

    func main() {
        e := echo.New()
    
        e.GET("/getdata/:id", contract.dataGet)
    
        log.Error().Err(e.Start(":8080")).Timestamp()
    }

    data.go

    package contract
    
    import (
        "github.com/labstack/echo/v4"
        "github.com/go-redis/redis"
        "github.com/wulijun/go-php-serialize/phpserialize"
    )
    
    func (s Data) BuildData(data string) (interface{}, bool) {
        if data == "" {
            return nil, true
        }
    
        d, err := phpserialize.Decode(data)
    
        if err != nil {
            return nil, true
        }
    
        return d, false
    }
    
    func dataGet(c echo.Context) error {
        // 省略 redis 配置
        data := client.(*redis.Client).Get(cacheKey).Val()
    
        result, e := BuildData(data)
    
        if e {
            return echo.NewHTTPError(400, echo.Map{"message": "data error."})
        }
    
        return c.JSON(200, result)
    }
    

    看到的返回结果

    "{\"name\":\"xiaoming\",\"nickname\":\"neo\"}"

    期待的结果

    {"name":"xiaoming", "nickname":"neo"}
    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部