本文介绍了golang解析api返回json问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

现在在用golang写一个http客户端,来请求HTTP返回的json,但是每个接口返回的格式都是一样的如:

{"code": 0,"data": [],"message": "Success"}

像这种格式的话 我们如果定义一个struct或者map都可以通过json.Unmarshal解析出来,但是关键是这个data里面的东西,每个接口里面的结构是不一样的,那么这个有没有什么统一的处理方法呢?
如果说 定义一个如:

type Result struct {
        Code    int    `json:"code"`
        Data    interface{} `json:"data"`
        Message string `json:"message"`
    }

或者map[string]interface{},这种的话 那么这个iterface{}怎么处理data里面的数据呢
比如一个接口返回的数据:

{"code": 0,"data": [{"item": 210263,"status": 0}],"message": "Success"}

{"code": 0,"data": ["cont": 210263,"list": [xxxxxx]}],"message": "Success"}

这种有什么方法可以通用处理么?

解决方案

我一般是这样的:

type BaseResponse struct {
    Code    int    `json:"code"`
    Message string `json:"message"`
}

func (br BaseResponse) Success() bool {
    return br.Code == 0 && br.Message == "success"
}

type AResponse struct {
    BaseResponse
    Data []AData
}

type BResponse struct {
    BaseResponse
    Data BData
}

这样也没什么麻烦的,其实似乎并没有通用的方法,在后面你还是要单独处理不同类型的数据,解析不同格式的Data,类型转换,倒不如一次性定义好,能很大程度上避免出错

这篇关于golang解析api返回json问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!