收藏
回答

小程序wx.request收到格式错误的json,解析出错时没有友好错误提示

问题模块
API和组件

今天碰到一个小bug,debug却花了两个多小时。


原因是服务端拿过来的json里面,有一个字符串是直接从sql取的,里面有个回车没有转义成标准json格式的\n,而是一个特殊字符(\u2028)。这个测试字符串用了半年,app端甚至小程序开发者工具都没报错,可以正常解析成回车,但是iOS端导致脚本停止执行,页面元素丢失,只剩两条错误信息:




看到日志就蒙了,因为请求日志没打出来,而且只有iOS端有这种问题(安卓没试过),地毯式排查了很长时间才发现是这个接口问题,本来以为是代码里引入了特殊字符,根本没想到是请求json格式问题……


这个json本身格式也不规范,但是大多数平台都能成功解析,所以也希望小程序这边也能正常解析;如果觉得对json格式要求严格一些比较好,也希望这个错误能有友好一点的提示。


## 复现


为了方便交流,临时开了一个测试接口,小程序iOS端调用即可复现:

wx.request({ url: 'https://myseu.cn/test/wxapp-bug-test', success: console.log })

后端代码很简单:

class WxappBugHandler(BaseHandler):
    def get(self):
        self.write({'test': '\u2028'})


最后一次编辑于  2017-08-01  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

2 个回答

  • 如风似水🔥
    如风似水🔥
    2017-08-02

    这就是空值如何复现?而且字符串表达式中是不允许换行的

    2017-08-02
    赞同
    回复
  • Rikumi
    Rikumi
    2017-08-02

    我说的很明确了,这确实(似乎)不符合json规范,但是其他几乎所有平台解析都没有问题。

    2017-08-02
    赞同
    回复