使用Google Apps Script PropertiesService遇对象字面量意外令牌语法错误
解决Google Apps PropertyService存储对象后解析的SyntaxError问题
我之前也踩过这个一模一样的坑!其实问题出在你对setProperties()的理解上——它不会自动帮你序列化对象。
当你直接把一个对象传给setProperties()的时候,PropertyService会把对象里的非基本类型值(比如嵌套对象)强制转换成字符串,但它不是转成标准JSON,而是转成[object Object]这种毫无意义的字符串。等你之后尝试用JSON.parse()去解析这个字符串时,自然会抛出SyntaxError: Unexpected Token in Object Literal,因为这根本不是合法的JSON格式。
正确的处理步骤:
存储对象前先序列化:用
JSON.stringify()把对象转换成标准的JSON字符串再存// 示例:存储单个设置对象 const appSettings = { theme: 'light', autoSync: true, maxItems: 50 }; // 存单个属性(推荐存对象用这个方式,逻辑更清晰) PropertiesService.getUserProperties().setProperty('appSettings', JSON.stringify(appSettings)); // 如果要批量设置多个属性,确保对象类型的属性都转成JSON字符串 const multiProps = { userName: 'Chris', userPrefs: JSON.stringify({ emailAlerts: false }) }; PropertiesService.getUserProperties().setProperties(multiProps);获取后再解析:拿到存储的字符串后,用
JSON.parse()转回对象// 获取并解析设置 const storedSettingsStr = PropertiesService.getUserProperties().getProperty('appSettings'); const appSettings = JSON.parse(storedSettingsStr); // 现在就能正常访问对象属性了 console.log(appSettings.theme); // 输出 'light'
额外注意事项:
- 清空PropertiesService后,建议用
getProperties()检查当前存储的所有属性,确保没有残留的旧格式数据,避免干扰测试。 - 如果你的对象里包含不能被JSON序列化的值(比如函数、Symbol),要先处理掉这些值,否则
JSON.stringify()会忽略它们或者直接报错。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

