小程序
小游戏
企业微信
微信支付
扫描小程序码分享
如果json字符串中有特殊字符,导致解析失败,已遇到过不下十次,希望微信能解决这个问题。
3 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
我也遇到了类似问题。只在 iOS 系统上。
如果是接口返回的 JSON 字符串里包含行分隔符(码位为\u2028)时,wx.request 的 success 的 res 参数的 res.data 将变成字符串类型,且行分隔符会被替换为换行符(码位为\u000A)。
wx.request({ url: 'http://windstone.cc/api', success(res) { console.log('typeof res', typeof res); // object console.log('typeof res.data', typeof res.data); // string let data = res.data; for (let i = 0; i < data.length; i++) { console.log(data[i], data[i].codePointAt(0).toString(16)); // 此处将字符串的每个码位打印出来,发现原本行分隔符所在的位置的码位为 \u000A,即变成了换行符 } } })
假设 http://windstone.cc/api 返回如下 JSON 字符串(可通过 Charles 做 Map Local),description 里值是一个未经编码的行分隔符(码位为\u2028),
{ "result": 1, "description": "�" }
解决方案是,将 res.data 里的换行符替换成 \\n,再经过 JSON.parse() 解析成 JavaScript 对象即可。
wx.request({ url: 'http://windstone.cc/api', success(res) { console.log('typeof res', typeof res); // object console.log('typeof res.data', typeof res.data); // string let data = res.data; data = data.replace(/\n/g, '\\n'); // 此处将换行符替换成 \\n data = JSON.parse(data) // 可以成功解析 } })
以上测试是在 iPhone XS MAX 上进行,微信版本 7.0.14,系统版本:iOS 13.5.1
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
给个代码片段看看
https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html
是因为有特殊字符,JSON的解析库应该是比较老导致的,希望官方升级一下
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
我也遇到了类似问题。只在 iOS 系统上。
如果是接口返回的 JSON 字符串里包含行分隔符(码位为\u2028)时,wx.request 的 success 的 res 参数的 res.data 将变成字符串类型,且行分隔符会被替换为换行符(码位为\u000A)。
wx.request({ url: 'http://windstone.cc/api', success(res) { console.log('typeof res', typeof res); // object console.log('typeof res.data', typeof res.data); // string let data = res.data; for (let i = 0; i < data.length; i++) { console.log(data[i], data[i].codePointAt(0).toString(16)); // 此处将字符串的每个码位打印出来,发现原本行分隔符所在的位置的码位为 \u000A,即变成了换行符 } } })
假设 http://windstone.cc/api 返回如下 JSON 字符串(可通过 Charles 做 Map Local),description 里值是一个未经编码的行分隔符(码位为\u2028),
{ "result": 1, "description": "�" }
解决方案是,将 res.data 里的换行符替换成 \\n,再经过 JSON.parse() 解析成 JavaScript 对象即可。
wx.request({ url: 'http://windstone.cc/api', success(res) { console.log('typeof res', typeof res); // object console.log('typeof res.data', typeof res.data); // string let data = res.data; data = data.replace(/\n/g, '\\n'); // 此处将换行符替换成 \\n data = JSON.parse(data) // 可以成功解析 } })
以上测试是在 iPhone XS MAX 上进行,微信版本 7.0.14,系统版本:iOS 13.5.1
给个代码片段看看
https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html
微信版本:7.0.11.1600
系统版本:安卓10
基础库:2.10.4
能正常转换
微信版本:7.0.14
系统版本:iOS 13.5.1
是因为有特殊字符,JSON的解析库应该是比较老导致的,希望官方升级一下