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

在AppScript中用Script Properties保存Map对象:序列化后返回空Map求解

在AppScript中用Script Properties保存Map对象的正确方法

问题根源很直接:JSON本身不支持直接序列化Map对象,如果你直接对Map用JSON.stringify(),得到的会是空对象{},存进Script Properties后再读出来,自然只能得到空Map。

下面是两种可靠的解决方法:

方法一:转为普通对象存储(适合键为字符串的场景)

如果你的Map键都是字符串类型,把Map转成普通对象再序列化是最方便的:

存储代码

// 先创建一个带数据的Map
const anglishWords = new Map([["hello", "hullo"], ["world", "werld"]]);
// 将Map转为普通对象,再序列化
const jsonText = JSON.stringify(Object.fromEntries(anglishWords));
// 存入Script Properties
const scriptPrp = PropertiesService.getScriptProperties();
scriptPrp.setProperty('anglishWords', jsonText);

读取并转回Map

const scriptPrp = PropertiesService.getScriptProperties();
const jsonT = scriptPrp.getProperty('anglishWords');
// 解析为对象后,转成Map
const anglishWordsE = new Map(Object.entries(JSON.parse(jsonT)));
// 验证:输出hullo
console.log(anglishWordsE.get("hello"));

方法二:转为二维数组存储(支持非字符串键)

如果你的Map键是数字、布尔这类非字符串类型,用对象存储会导致键被强制转为字符串(比如键1变成"1"),这时候可以把Map转成二维数组再序列化:

存储代码

// 带非字符串键的Map
const anglishWords = new Map([[1, "first"], [true, "yes"]]);
// 将Map转为二维数组后序列化
const jsonText = JSON.stringify(Array.from(anglishWords.entries()));
const scriptPrp = PropertiesService.getScriptProperties();
scriptPrp.setProperty('anglishWords', jsonText);

读取并转回Map

const scriptPrp = PropertiesService.getScriptProperties();
const jsonT = scriptPrp.getProperty('anglishWords');
// 解析数组后直接传入Map构造函数
const anglishWordsE = new Map(JSON.parse(jsonT));
// 验证:输出first
console.log(anglishWordsE.get(1));

你之前的代码之所以返回空Map,大概率是因为直接对空Map或者未正确转换的Map执行了JSON.stringify(),导致存入的是空对象。按上面的方法先转换Map结构再序列化,就能正常存储和读取了。

内容的提问来源于stack exchange,提问作者Jonah Thiele

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:42:20