代码之家  ›  专栏  ›  技术社区  ›  m5khan

google应用程序脚本属性服务getProperties()返回未定义的值

  •  3
  • m5khan  · 技术社区  · 9 年前

    我有一个包含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 ,所以我首先将值字符串化(因为 属性服务 仅允许字符串值),然后保存它。

    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 对象,但当我尝试使用 pro[index] 如中所述 documentation 它会返回 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 回复  |  直到 9 年前
        1
  •  3
  •   m5khan    9 年前

    我找到了答案,问题是钥匙, 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
    }
    

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