3***@qq.com
3***@qq.com
  • 发布:2022-09-26 15:58
  • 更新:2023-09-12 12:06
  • 阅读:2577

【报Bug】uni.getStorageSync方法使用异常,异常信息为"SyntaxError: Unexpected token , in JSON at position 392"

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: window10

HBuilderX类型: 正式

HBuilderX版本号: 3.6.4

手机系统: Android

手机系统版本号: Android 8.0

手机厂商: 华为

手机机型: Honor 8 Lite2

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:

uni.setStorageSync 存储一个数组,长度为26,数组中的元素为10个汉字。
uni.getStorageSync 获取该数组时报异常。

预期结果:

uni.getStorageSync 能正常获取该数组

实际结果:

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

其他使用场景也有对数组的存储、获取,暂时没有发现有这种问题。

2022-09-26 15:58 负责人:DCloud_Android_DQQ 分享
已邀请:

最佳回复

DCloud_Android_DQQ

DCloud_Android_DQQ

HBuilderX3.6.8-alpha已修复

  • 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

菜鸟驿站111

菜鸟驿站111

你好,解决了吗

  • 3***@qq.com (作者)

    Storage机制、全局变量机制 一起使用,进行规避。


    只使用全局变量机制,是否会引入其他问题,暂时不确定。

    2022-10-25 14:08

l***@163.com

l***@163.com

我也遇到了这个问题,云打包以后再安卓手机上运行就报错,然后进程就卡死,得重启进程

  • 菜鸟驿站111

    目前是用H5+异步存,异步取解决的

    2022-10-09 10:10

DCloud_Android_DQQ

DCloud_Android_DQQ

能提供一个示例嘛

  • 小哈

    我这边就是存长的中文字符串就会报这个错的 超过200个字符

    2022-10-13 16:47

  • Cardjoin

            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

  • Cardjoin

    浏览器没有问题,app报错

    2022-10-19 14:33

菜鸟驿站111

菜鸟驿站111

这样存这样子取就解决了

T***@163.com

T***@163.com

JSON转字符串后,转成UT8编码;在转成base64码,存储。 取得时候解base64在解UTF8。 应该跟字符集有关,浏览器JS环境默认字符集不支持UT8,需要转一下

T***@163.com

T***@163.com

最简单方法就是转Unicode码存储。取得时候在转回来。缺点就是:别存表情、图标;手机各厂商对字符集支持范围不一样,取得时候容易乱码

  • 3***@qq.com (作者)

    这个方式明天,我确认一下。

    谢谢

    2022-10-24 20:33

  • 3***@qq.com (作者)

    将汉字转为unicode码存储,数据转换失败的几率增加了,

    报的异常信息为:

    SyntaxError: Unexpected string in JSON at position 255

    2022-10-25 14:05

3***@qq.com

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

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没有输出

DCloud_UNI_Anne

DCloud_UNI_Anne

HBuilderX3.6.8-alpha已修复

  • 3***@qq.com (作者)

    收到,谢谢

    2022-11-02 09:28

牛牛2021

牛牛2021

遇到同样问题。怎么hb越来越不稳定了。

邱天

邱天 - 能不能写一个完整的官方demo呐,看的云里雾里的

我更新了HbuilderX版本到3.6.5,看到此问题日志显示已更新,打包H5部署后,APP使用WebView加载当前页面依然获取不到存储的token,导致用户抛出token异常错误

夫子仰慕者

夫子仰慕者 - 厉害了吧

HB 3.7.3.20230223 仍然出现同样的问题

  • 夫子仰慕者

    错误内容 =SyntaxError: Unexpected token N in JSON at position 289",""]

    2023-03-07 15:16

7***@qq.com

7***@qq.com

HB 3.6.18 在有些机器 getStorageSync 获取不到数据

要回复问题请先登录注册