谷歌应用程序脚本属性服务getProperties()返回值为undefined

时间:2015-07-29 08:42:41

标签: google-apps-script google-docs-api

我有一个带有JSON的键值映射

 var prop = {
    0 : [{"start":0, "end":10}, {"start":15, "end" : 30}],
    1 : [{"start":3, "end":11}],
    2 : [{"start":6, "end":9},{"start":9,"end" :17},{"start":32,"end":39}],
    4 : [],
    5 : [{"start":19,"end":27}]
 };

我想在PropertiesService userProperties中保存此对象,因此我首先对值进行字符串化(因为PropertiesService只允许字符串值)然后保存它。

for(var i in prop){
    prop[i] = JSON.stringify(prop[i]);
}
var userProperties = PropertiesService.getUserProperties();
userProperties.setProperties(prop, true);

稍后,当我使用Properties.getProperties()方法检索属性时,它返回了属性对象。

var userProperties = PropertiesService.getUserProperties();
var pro = userProperties.getProperties();

问题是Logger.log(pro)向我显示prop个对象,但当我尝试使用documentation中所述的pro[index]访问属性值时,它会返回undefined

当我尝试使用userProperties.getProperty(i)访问值时,它会返回值。

我的问题是为什么我无法以这种方式访问​​这些属性:

for(var i in pro){
    Logger.log(pro[i]);   // returns undefined
}

但下面的代码可以使用

for(var i in pro){
    Logger.log(userProperties.getProperty(i));  //successfully returns value
}

1 个答案:

答案 0 :(得分:2)

我找到了答案,问题在于密钥,PropertiesService只允许密钥和值都是String类型。

var prop = {
    "p0" : [{"start":0, "end":10}, {"start":15, "end" : 30}],
    "p1" : [{"start":3, "end":11}],
    "p2" : [{"start":6, "end":9},{"start":9,"end" :17},{"start":32,"end":39}],
    "p4" : [],
    "p5" : [{"start":19,"end":27}]
};

现在当我使用键访问值时,它可以工作

var userProperties = PropertiesService.getUserProperties();
var pro = userProperties.getProperties();
for(var i in pro){
    Logger.log(pro[i]);   // returns value successfully
}

所以键和值都应该是字符串类型