小程序wx.request收到格式错误的json,解析出错时没有友好错误提示
发布于 6 年前 作者 jieliao 8108 次浏览 来自 问答

今天碰到一个小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'})
2 回复

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

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

回到顶部