uni.setStorageSync 存储一个数组,长度为26,数组中的元素为10个汉字。
uni.getStorageSync 获取该数组时报异常。
![3***@qq.com](https://img-cdn-tc.dcloud.net.cn/account/identicon/80f5599d13e355e353349bb5cf6725f9.png)
- 发布:2022-09-26 15:58
- 更新:2023-09-12 12:06
- 阅读:2577
【报Bug】uni.getStorageSync方法使用异常,异常信息为"SyntaxError: Unexpected token , in JSON at position 392"
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: window10
HBuilderX类型: 正式
HBuilderX版本号: 3.6.4
手机系统: Android
手机系统版本号: Android 8.0
手机厂商: 华为
手机机型: Honor 8 Lite2
页面类型: vue
vue版本: vue2
打包方式: 云端
项目创建方式: HBuilderX
操作步骤:
预期结果:
uni.getStorageSync 能正常获取该数组
uni.getStorageSync 能正常获取该数组
实际结果:
SyntaxError: Unexpected token , in JSON at position 392
SyntaxError: Unexpected token , in JSON at position 392
bug描述:
应用中使用 uni.setStorageSync将一些常用信息存储在移动端,在使用地点通过uni.getStorageSync获取数据。
其中一个常用信息为长度为26的数组,数组中的元素为10个汉字,在uni.getStorageSync获取该数组时,报异常:
SyntaxError: Unexpected token , in JSON at position 392
其他使用场景也有对数组的存储、获取,暂时没有发现有这种问题。
最佳回复
![DCloud_Android_DQQ](http://img-cdn-tc.dcloud.net.cn/uploads/avatar/001/50/75/25_avatar_mid.jpg?v=1672804994)
能提供一个示例嘛
-
-
let temp = {
"contentlist": [{
"annotation": "孟冬"
}, {
"annotation": "鹍鸡凤凰的别名。鸷鸟凶猛的鸟。如鹰、雕、枭等。潜藏:潜伏隐藏。熊罴:熊和罴。皆为猛兽。罴,棕熊,又叫马熊,毛棕褐色。"
}, {
"annotation": "钱镈两种农具名。农事钱,铁铲。镈,锄一类的农具。农收。农作物的收获。谓农事终了。积场:囤积在场院。逆旅:客舍;旅馆。旅居。整设:整理设置。以通:用以通商"
}],
"poetId": "5b1e3582cb",
}
let poemData = JSON.stringify(temp);
uni.setStorageSync('poemData', poemData);
console.log('name', uni.getStorageSync('poemData'));
[Vue warn]: Error in onLoad hook: "SyntaxError: Unexpected token � in JSON at position 256"
2022-10-19 14:33
-
![T***@163.com](https://img-cdn-tc.dcloud.net.cn/account/identicon/d64313cdf81750f19b1bf7b9a5e649fa.png)
最简单方法就是转Unicode码存储。取得时候在转回来。缺点就是:别存表情、图标;手机各厂商对字符集支持范围不一样,取得时候容易乱码
-
-
3***@qq.com (作者)
将汉字转为unicode码存储,数据转换失败的几率增加了,
报的异常信息为:
SyntaxError: Unexpected string in JSON at position 2552022-10-25 14:05
![3***@qq.com](https://img-cdn-tc.dcloud.net.cn/account/identicon/80f5599d13e355e353349bb5cf6725f9.png)
3***@qq.com (作者)
避免json转换,偶尔也会出数据现转换失败的现象。
1、将数组转换成一定规则的字符串,进行直接存储。
var arr=[];
for(var i=0;i<100;i++){
arr[arr.length] = "XXXXXXXXXXXXX";
}
uni.setStorageSync('test', arr.join(","));
2、在使用地点,将字符串转换为数组
var ss = uni.getStorageSync('test').split(",");
![3***@qq.com](https://img-cdn-tc.dcloud.net.cn/account/identicon/80f5599d13e355e353349bb5cf6725f9.png)
3***@qq.com (作者)
var arr=[];
for(var i=0;i<100;i++){
arr.push("阿坝藏族羌族自治州阿坝藏族羌族自治州");
}
uni.setStorageSync('test', arr.join(","));
try{
this.test = uni.getStorageSync('test').split(",");
}catch(e){
console.log(e)
console.log(uni.getStorageSync('test'))
}
异常打印出来为下图,
第二个console.log没有输出
![邱天](http://img-cdn-tc.dcloud.net.cn/uploads/avatar/001/27/95/52_avatar_mid.jpg?v=1669268858)
邱天 - 能不能写一个完整的官方demo呐,看的云里雾里的
我更新了HbuilderX版本到3.6.5,看到此问题日志显示已更新,打包H5部署后,APP使用WebView加载当前页面依然获取不到存储的token,导致用户抛出token异常错误
4***@qq.com
有进度吗
2022-10-25 17:53
夫子仰慕者
HB 3.7.3.20230223 仍然出现同样的问题 错误内容 =SyntaxError: Unexpected token N in JSON at position 289",""]
2023-03-07 15:19
DCloud_Android_DQQ
回复 x***@163.com: 新提个问题吧。
2023-03-08 12:00