背景
微信小程序有一个功能需要调用wx.scanCode扫描二维码,获取二维码中的字符串信息,再通过JSON.parse将字符串转换为对象。
比如以下二维码中包含 字符串:
{“scanType”:“saveCustomerInfo”,“jsonObject”:{“customerCode”:“001”,“customerName”:“中国公司”,“firstLetter”:“T”}}
代码
/**
* 扫一扫功能:将扫描的信息发往后台进行业务逻辑判断
*/
getScanCode: function () {
if (app.globalData.userInfo) {
wx.scanCode({
onlyFromCamera: true,
scanType: ["qrCode", "barCode", "datamatrix", "pdf417"],
success: (res) => {
console.log("scan success", res.result);
//TODO 调用后台逻辑
this.scan(res.result)
},
fail: (res) => {
console.log("fail", res);
//app.showInfo("无效二维码");
},
complete: () => {},
});
} else {
app.showInfo("正在登录系统");
wx.navigateTo({
url: "../index/index",
success: (result) => {},
fail: () => {},
complete: () => {},
});
}
},
/**调用服务端上传扫一扫信息 */
scan: function (result) {
console.log("result", result);
let res = JSON.parse(result)
console.log("res", res);
if (res.scanType==undefined) {
app.showInfo("非法扫描信息");
return;
}
const _request = new request();
_request(
//业务逻辑处理
...
)
}
错误
出现字符串无法转换对象的错误 :
如果将其中的中文字替换成英文,则解析正常:
{“scanType”:“saveCustomerInfo”,“jsonObject”:{“customerCode”:“001”,“customerName”:“Chinese Company”,“firstLetter”:“T” }}
如何解决
仔细查看错误提示,描述是因为扫描二维码获取的值,前端有一个空格。用result.trim()去除空格后解决问题。
/**调用服务端上传扫一扫信息 */
scan: function (result) {
console.log("result", result);
let res = JSON.parse(result.trim())
console.log("res", res);
if (res.scanType==undefined) {
app.showInfo("非法扫描信息");
return;
}
const _request = new request();
_request(
//业务逻辑处理
...
)
}