电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

解決golang json解析出現(xiàn)值為空的問題

瀏覽:107日期:2024-05-30 10:22:35

我是通過beego框架,將請求過來的json進行解析,并將值保存在結構體中

--------------------1--------------------- request := UpdateCommentRequestData{} req := common.Request{Data: request} err := json.Unmarshal(controller.Ctx.Input.RequestBody, &req)------------------------------------------

其中 UpdateCommentRequestData的結構是這樣的

type UpdateCommentRequestData struct { Id []string `json:'id'`}

common.request的結構是這樣的

type Request struct { UserId uint64 `json:'userId,string'` Data interface{} `json:'data'`}

我使用1中的代碼進行解析,發(fā)現(xiàn)request.Id的值是空的,但是傳來的json是存在Id值的,當時一頭霧水,就不斷在日志中打印,后來定位到是數(shù)據(jù)類型存在問題,

在1中的代碼里面,Data字段傳的是request的值,是值的拷貝,也就是說,json解析后的數(shù)據(jù)并不是賦值到reques中,所以使用request.Id并不會取到值,

如果將代碼改成這樣,再使用request.Id就可以取到值了

req := common.Request{Data: request},

補充:golang Unmarshal拿不全數(shù)據(jù)問題

說明:這個問題出現(xiàn)在后端調用json.Unmarshal方法去解析數(shù)據(jù)庫中存的數(shù)據(jù)時,解析出來的結果中只能拿到部分數(shù)據(jù),json格式經(jīng)檢查后正確無誤,同時也沒有字段名出錯等低級錯誤。

首先來看要解析后的go結構體

type ParamConfig struct { //標識Id Id string //抓拍目標參數(shù)配置 SnapObjConfig *SnapObjConfig //默認去重參數(shù)配置 DefaltDeweightConfig *DefaltDeweightConfig}//抓拍目標參數(shù)結構type SnapObjConfig struct { //分辨率參數(shù) Distinguish *Distinguish //機動車配置 vehicle *DataConfig //非機動車配置 nonmotor *DataConfig //行人配置 pedestrian *DataConfig //人臉配置 face *DataConfig}//分辨率結構type Distinguish struct { //分辨率值 DistinguishRate int32} type DataConfig struct { //最小寬度 MinWeight int32 //最小高度 MinHight int32}//默認去重參數(shù)結構type DefaltDeweightConfig struct { vehicle *DeweightNum nonmotor *DeweightNum pedestrian *DeweightNum face *DeweightNum}//默認參數(shù)值結構type DeweightNum struct { Number float32}

先向數(shù)據(jù)庫中插入一條需要解析的數(shù)據(jù)

解決golang json解析出現(xiàn)值為空的問題

SQL語句如下所示:

INSERT INTO 'public'.'sys_config'('config_key', 'config_value') VALUES (’param_config’, ’[{'Id':'8149aa8e-1466-469b-ac5e-b0ea72f96129','SnapObjConfig':{'Distinguish':{'DistinguishRate':270},'vehicle':{'MinWeight':128,'MinHight':128},'nonmotor':{'MinWeight':32,'MinHight':64},'pedestrian':{'MinWeight':32,'MinHight':64},'face':{'MinWeight':40,'MinHight':40}},'DefaltDeweightConfig':{'vehicle':{'Number':0.95},'nonmotor':{'Number':0.95},'pedestrian':{'Number':0.95},'face':{'Number':0.95}}}]’);

為了方便說明下面在代碼中打上詳細的log,大碼如下:

func (this *CommonController)GetParamConfig(c *gin.Context) { searchResp := &models.SearchResp{ Code: models.ApiStatus_SUCCESS, Msg: 'successs', } retParamConfig := make([]*ParamConfig, 0) if configs, err := db_model.SysConfigsByConfigKey(this.DB, ParamConfigKey); err != nil && !models.IsEmptyResults(err){ glog.Infoln(err) searchResp.Code = models.ApiStatus_ERROR searchResp.Msg = 'fail' c.JSON(http.StatusInternalServerError, searchResp) return } else if len(configs) > 0 { glog.Infoln('data----------------', configs[0].ConfigValue) if err := json.Unmarshal([]byte(configs[0].ConfigValue), &retParamConfig); err != nil { glog.Errorln(err) searchResp.Code = models.ApiStatus_ERROR searchResp.Msg = err.Error() c.JSON(http.StatusInternalServerError, searchResp) return } } searchResp.Data = retParamConfig glog.Infoln('retParamConfig[0].SnapObjConfig.Vehicle----------', retParamConfig[0].SnapObjConfig.vehicle) glog.Infoln('retParamConfig[0].SnapObjConfig.nonmotor-----------', retParamConfig[0].SnapObjConfig.nonmotor) glog.Infoln('retParamConfig[0].SnapObjConfig.pedestrian------------', retParamConfig[0].SnapObjConfig.pedestrian) glog.Infoln('retParamConfig[0].SnapObjConfig.Fsce------------------', retParamConfig[0].SnapObjConfig.face) glog.Infoln('retParamConfig[0].DefaltDeweightConfig.Fsce------------------', retParamConfig[0].DefaltDeweightConfig.face) glog.Infoln('retParamConfig[0].DefaltDeweightConfig.Fsce------------------', retParamConfig[0].DefaltDeweightConfig.vehicle) glog.Infoln('retParamConfig[0].DefaltDeweightConfig.Fsce------------------', retParamConfig[0].DefaltDeweightConfig.nonmotor) glog.Infoln('retParamConfig[0].DefaltDeweightConfig.Fsce------------------', retParamConfig[0].DefaltDeweightConfig.pedestrian) c.JSON(http.StatusOK, searchResp)}

運行之后如圖所示:

解決golang json解析出現(xiàn)值為空的問題

很明顯從一開始我們就向數(shù)據(jù)庫中存入了數(shù)據(jù),同時從日志中可以看出,data中存的是去數(shù)據(jù)庫中獲取的數(shù)據(jù),數(shù)據(jù)和剛開始存入到數(shù)據(jù)庫中的值一樣,但是調用unmarshal之后卻獲取不到全部的數(shù)據(jù),可以看一下使用postman調用接口之后的返回結果如下:

解決golang json解析出現(xiàn)值為空的問題

接口的返回值中只是返回了部分數(shù)據(jù),到底是出了什么問題呢?之后我曾仔細的核對完每一個結構字段和數(shù)據(jù)庫中字段的類型,確保并不是這些原因導致的,想了很久不知道這個問題到底是如何發(fā)生的,無意中將結構體中的字段名的首字母都變成了大寫,經(jīng)過編譯運行之后終于拿到了全部的數(shù)據(jù),

解決golang json解析出現(xiàn)值為空的問題

有了這個結果之后,我又去仔細的google了一下這個問題,原來結構體中的每一項如果是導出項的時候首字母必須是大寫的,但是問題是SQL語句中在數(shù)據(jù)庫中存入的信息都是首字母小寫的,檢索出來的結果卻是大寫的,很明顯這個處理過程中大小寫匹配的問題被忽略掉了,因此要想按照我們的信息隨意匹配的話就得在結構體后面加tag,這樣解析時就會只匹配tag中的名字,但是tag中的結果不能為空格否則依舊會報錯。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 示波器高压差分探头-国产电流探头厂家-南京桑润斯电子科技有限公司 | 护腰带生产厂家_磁石_医用_热压护腰_登山护膝_背姿矫正带_保健护具_医疗护具-衡水港盛 | 航空连接器,航空插头,航空插座,航空接插件,航插_深圳鸿万科 | 变色龙云 - 打包app_原生app_在线制作平台_短链接_ip查询 | 广东燎了网络科技有限公司官网-网站建设-珠海网络推广-高端营销型外贸网站建设-珠海专业h5建站公司「了了网」 | COD分析仪|氨氮分析仪|总磷分析仪|总氮分析仪-圣湖Greatlake | 隔爆型防爆端子分线箱_防爆空气开关箱|依客思 | 首页_欧瑞传动官方网站--主营变频器、伺服系统、新能源、软起动器、PLC、HMI | 高低温万能试验机_拉力试验机_拉伸试验机-馥勒仪器科技(上海)有限公司 | 航拍_专业的无人机航拍摄影门户社区网站_航拍网 | 面粉仓_储酒罐_不锈钢储酒罐厂家-泰安鑫佳机械制造有限公司 | 抓斗式清污机|螺杆式|卷扬式启闭机|底轴驱动钢坝|污水处理闸门-方源水利机械 | 上海律师事务所_上海刑事律师免费咨询平台-煊宏律师事务所 | 雷蒙磨,雷蒙磨粉机,雷蒙磨机 - 巩义市大峪沟高峰机械厂 | 北京律师事务所_房屋拆迁律师_24小时免费法律咨询_云合专业律师网 | 广州物流公司_广州货运公司_广州回程车运输 - 万信物流 | 粉丝机械,粉丝烘干机,粉丝生产线-招远市远东粉丝机械有限公司 | 求是网 - 思想建党 理论强党 | 尚为传动-专业高精密蜗轮蜗杆,双导程蜗轮蜗杆,蜗轮蜗杆减速机,蜗杆减速机生产厂家 | 烟台金蝶财务软件,烟台网站建设,烟台网络推广 | 专注提供国外机电设备及配件-工业控制领域一站式服务商-深圳市华联欧国际贸易有限公司 | 骁龙云呼电销防封号系统-axb电销平台-外呼稳定『免费试用』 | 沈阳建筑设计公司_加固改造设计_厂房设计_设计资质加盟【金辉设计】 | 整车VOC采样环境舱-甲醛VOC预处理舱-多舱法VOC检测环境仓-上海科绿特科技仪器有限公司 | 北京模型公司-工业模型-地产模型-施工模型-北京渝峰时代沙盘模型制作公司 | 球磨机 选矿球磨机 棒磨机 浮选机 分级机 选矿设备厂家 | 水稻烘干机,小麦烘干机,大豆烘干机,玉米烘干机,粮食烘干机_巩义市锦华粮食烘干机械制造有限公司 水环真空泵厂家,2bv真空泵,2be真空泵-淄博真空设备厂 | 河北凯普威医疗器材有限公司,高档轮椅系列,推车系列,座厕椅系列,协步椅系列,拐扙系列,卫浴系列 | 广州中央空调回收,二手中央空调回收,旧空调回收,制冷设备回收,冷气机组回收公司-广州益夫制冷设备回收公司 | 讲师宝经纪-专业培训机构师资供应商_培训机构找讲师、培训师、讲师经纪就上讲师宝经纪 | 窖井盖锯圆机_锯圆机金刚石锯片-无锡茂达金刚石有限公司 | 医用酒精_84消毒液_碘伏消毒液等医用消毒液-漓峰消毒官网 | 传爱自考网_传爱自学考试网| 智慧钢琴-电钢琴-便携钢琴-数码钢琴-深圳市特伦斯乐器有限公司 | 骨密度仪-骨密度测定仪-超声骨密度仪-骨龄测定仪-天津开发区圣鸿医疗器械有限公司 | 大功率金属激光焊接机价格_不锈钢汽车配件|光纤自动激光焊接机设备-东莞市正信激光科技有限公司 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 德州网站开发定制-小程序开发制作-APP软件开发-「两山开发」 | 网站建设-临朐爱采购-抖音运营-山东兆通网络科技 | 冰晶石|碱性嫩黄闪蒸干燥机-有机垃圾烘干设备-草酸钙盘式干燥机-常州市宝康干燥 | 垃圾处理设备_餐厨垃圾处理设备_厨余垃圾处理设备_果蔬垃圾处理设备-深圳市三盛环保科技有限公司 | 质检报告_CE认证_FCC认证_SRRC认证_PSE认证_第三方检测机构-深圳市环测威检测技术有限公司 |