You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ionic Storage修改对象部分属性时出现JSON解析错误

解决Ionic Storage修改对象属性时的JSON解析错误

嘿,我一眼就看出你遇到的问题了——那个Unexpected token o的错误,根源是你多做了一次JSON解析!

为什么会报错?

Ionic Storage有个实用的自动序列化机制:当你用storage.set()存储对象时,它会自动把对象转成JSON字符串;调用storage.get()时,又会自动把JSON字符串转回JavaScript对象。

你现在的代码里,this.storage.get('object')返回的valueStr其实已经是现成的对象了,根本不是JSON字符串!这时候再调用JSON.parse(valueStr),相当于把对象强制转成了字符串"[object Object]",去解析这个完全不符合JSON格式的字符串,自然就会在第一个字符o的位置抛出错误啦。

修正后的代码

直接去掉多余的JSON.parse(),存的时候也可以直接传对象(Storage会自动处理序列化):

modifyObject() { 
  this.storage.get('object').then(value => { 
    // 直接操作已经反序列化好的对象
    value.a = '10'; 
    // 直接存对象,Storage会自动帮你序列化
    this.storage.set('object', value); 
    // 如果你习惯显式序列化,也可以这么写,效果一样:
    // this.storage.set('object', JSON.stringify(value));
  }); 
}

更稳妥的兼容写法(如果不确定存储格式)

要是你不确定之前是手动存的字符串还是自动存的对象,可以加个类型判断,避免报错:

modifyObject() { 
  this.storage.get('object').then(storedValue => { 
    const value = typeof storedValue === 'string' 
      ? JSON.parse(storedValue) 
      : storedValue;

    value.a = '10'; 
    this.storage.set('object', JSON.stringify(value)); 
  }); 
}

小提醒

最好保持存储和读取的逻辑一致:要么全程依赖Storage的自动序列化/反序列化,要么每次都手动用JSON.stringify()和JSON.parse()处理,这样就不会再出现这类混淆啦。

内容的提问来源于stack exchange,提问作者Charles Emieux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:58:43