问题:
json对象中的key不带双引号,导致json.Unmarshal()解析失败。
样例数据:
{
AGE: 45,
SEX: 2,
JGSJ: "20200731152755",
DEVICEID: "ea0d0534cb3a4806b08cce001c33bf1f",
JKSBBH: "321282840000047700128094",
KKBH: "5f91fc407b364d74a2a251e6bceaf4ba",
XSFX: "",
DWMC: "新桥鑫宏发超市",
CLUSTERID: "",
RECVNODEID: "12d32621f6747b4b9f2513690d300174",
ID: "3212828400000477001280942020073100000000003107",
BKPIC: "http://172.29.126.139:8092/facepic/download/00007TRSzIdlo30VHLwi=019PzSF6k",
FACEPIC: "http://172.29.126.139:8092/facepic/download/00007TRSzIdlo30VHREZ9008DpZn9V"
}
解决办法:
使用正则表达式替换key来补充丢失的双引号,只能用来处理字母开头的键值,如果该键值是数字开头,需要修改对应正则。
func regJsonData(Data []byte) []byte {
reg := regexp.MustCompile("([a-zA-Z]\\w*):")
regStr := reg.ReplaceAllString(string(Data), `"$1":`)
fmt.Printf("%v\n", regStr)
//字符串替换值为http中的内容
newStr := strings.Replace(regStr, `"http":`, "http:", -1)
fmt.Printf("%v\n", newStr)
return []byte(newStr)
}
测试结果:
{
"AGE": 45,
"SEX": 2,
"JGSJ": "20200731152755",
"DEVICEID": "ea0d0534cb3a4806b08cce001c33bf1f",
"JKSBBH": "321282840000047700128094",
"KKBH": "5f91fc407b364d74a2a251e6bceaf4ba",
"XSFX": "",
"DWMC": "新桥鑫宏发超市",
"CLUSTERID": "",
"RECVNODEID": "12d32621f6747b4b9f2513690d300174",
"ID": "3212828400000477001280942020073100000000003107",
"BKPIC": "http://172.29.126.139:8092/facepic/download/00007TRSzIdlo30VHLwi=019PzSF6k",
"FACEPIC": "http://172.29.126.139:8092/facepic/download/00007TRSzIdlo30VHREZ9008DpZn9V"
}