登录
首页 >  Golang >  Go问答

在这种情况下如何解压缩 json?

来源:stackoverflow

时间:2024-04-16 15:24:35 342浏览 收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《在这种情况下如何解压缩 json?》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

问题内容

我必须在 elk 的 echo 框架中间件中解组 json(request, response body),就像这段代码一样。

var reqJSONBody, resJSONBody map[string]interface{}
if len(*reqBody) > 0 {
    if err := unmarshalJSON(reqBody, &reqJSONBody); err != nil {
        gl.ServiceLogger.Error("error parsing the request body: ", requestURI, err)
    }
    encryptPrivacyField(&reqJSONBody)
}
if len(*resBody) > 0 && resContentType != "" && strings.Contains(resContentType, "application/json") {
    if err := unmarshalJSON(resBody, &resJSONBody); err != nil {
        gl.ServiceLogger.Error("error parsing the response body: ", requestURI, err)
    }
    encryptPrivacyField(&resJSONBody)
}

这就是工作,

但是,一些对 []map[string]interface{} 类型的 uri 响应。

所以我收到了这个错误。

json:无法将数组解组为 map[string]interface {} 类型的 go 值

解决问题的最佳方法是什么?


正确答案


我通过更改解决了这个问题:

var reqjsonbody, resjsonbody interface{}
if len(*reqbody) > 0 {
    if err := json.unmarshal(*reqbody, &reqjsonbody); err != nil {
        gl.servicelogger.error("error parsing the request body: ", requesturi, err)
    }
    encryptprivacyfield(&reqjsonbody)
}

所以我必须像这样更改 encryptprivacyfield 方法:

func encryptPrivacyField(data *interface{}) {
switch reflect.TypeOf(*data).Kind() {
case reflect.Map:
    for _, field := range getPrivacyFieldList() {
        if item, ok := (*data).(map[string]interface{})[field]; ok && item != nil {
            (*data).(map[string]interface{})[field] = db.NewEncString(fmt.Sprintf("%v", (*data).(map[string]interface{})[field]))
        }
    }

    for _, field := range getHashFieldList() {
        if item, ok := (*data).(map[string]interface{})[field]; ok && item != nil {
            (*data).(map[string]interface{})[field] = db.NewHashString(fmt.Sprintf("%v", (*data).(map[string]interface{})[field]))
        }
    }
case reflect.Slice:
    for index, _ := range (*data).([]interface{}) {
        encryptPrivacyField(&(*data).([]interface{})[index])
    }

}
}

感谢@mkopriva 的建议。

终于介绍完啦!小伙伴们,这篇关于《在这种情况下如何解压缩 json?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>