微信小程序开发之JSON处理异常
白羽 2018-07-18 来源 :网络 阅读 2577 评论 0

摘要:本文将带你了解微信小程序开发之JSON处理异常,希望本文对大家学微信有所帮助。




问题描述最近在小程序的开发过程中,遇到一个神奇的问题。小程序用于发起网络请求的 API wx.request 默认会对为 JSON 格式的响应体进行解析,返回 JS Object。wx.request({
    url: 'test.php', //仅为示例,并非真实的接口地址
    data: {
        x: '',
        y: ''
    },
    header: {
        'content-type': 'application/json' // 默认值
    },
    success: function(res) {
        console.log(res.data)
    }
})其中 res.data 一般会是 Object 类型。但是,响应体的 JSON 数据包含了 \\u2028 的字符,就会解释失败,输出的 res.data 是响应体的字符串类型。样本测试样本:{“test”:”这里有一个特殊字符:
 "}测试代码:wx.request({
    ...
    success: (res) => {
        console.log('APIFactory:run', '调试', { res });
    },
});结果:在 开发者工具 中,能正常解析在 真机(iOS 和 Android),都解析失败u2028该特殊字符就是 \u2028,解析为行分隔符。该字符,在 JSON 字符串中,是被兼容的,是能被 JSON.parse 正常解析的。但是 JS 代码中有这个字符串,就会导致运行出错。为什么真机和开发者工具表现不一致微信小程序运行在三端:iOS、Android 和 用于调试的开发者工具。三端的JS脚本执行环境是各不相同的:在 iOS 上,小程序的 javascript 代码是运行在 JavaScriptCore 中。在 Android 上,小程序的 javascript 代码是通过 X5 JSCore来解析。在 开发工具上, 小程序的 javascript 代码是运行在 nwjs 中。而小程序的逻辑层和视图层,都是通过「WeixinJsBridge」来调用 Native API 的。所以问题出在,wx.request 对于响应体的数据处理,到底是在 JS Engine 处理的,还是 Native 处理的,在微信不公开小程序源码的情况下,不得而知。wx.request 的处理对于我们来说,相当于黑盒,并且对于 res.data 的数据类型可能值是多种的,如果想在业务上提供更好的健壮性,还需要兼容 res.data 为 Object/String 类型时的判断和容错代码。参考微信小程序运行流程看这篇就够了    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之微信频道!

本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 6 不喜欢 | 1
看完这篇文章有何感觉?已经有7人表态,86%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程