Preface
我发布此内容是为了警告其他人 google.script.run 中存在潜在错误,提出可能的解决方法,并征求社区对可能发生的情况的进一步见解。
问题
我将一个大数据对象传递给通过 google.script.run 调用的服务器端函数。这是调用 Google.script.run 之前客户端的样子(通过 JSON.stringify 获得并通过警报框输出):
{“roundStartTime”:“12:00:00”,“roundFinishTime”:“12:45:23”,“holeData”:{“1”:{“笔划”:1,“finishTime”:“12:02: 00"},"2":{"笔画":6,"完成时间":"12:04:00"},"3":{"笔画":7,"完成时间":"12:06:00" },"4":{"笔画":8,"完成时间":"12:08:00"},"5":{"笔画":9,"完成时间":"12:10:00"}, "6":{"笔画":10,"完成时间":"12:12:00"},"7":{"笔画":11,"完成时间":"12:14:00"},"8 ":{"笔画":12,"完成时间":"12:16:00"},"9":{"笔画":13,"完成时间":"12:18:00"},"10": {"笔画":1,"完成时间":"12:30:00"},"11":{"笔画":11,"完成时间":"12:33:00"},"12":{"笔画":8,"完成时间":"12:35:00"},"13":{"笔画":3,"完成时间":"12:37:00"},"14":{"笔画" :7,"完成时间":"12:39:00"},"15":{"笔画":10,"完成时间":"12:40:00"},"16":{"笔画":11 ,"完成时间":"12:42:00"},"17":{"笔画":13,"完成时间":"12:45:00"},"18":{"笔画":6}} }`
这是在服务器端接收到的相同对象(通过 JSON.stringify 获得并通过 Google 的 Logger.log 函数输出):
{"roundStartTime":"12:00:00","holeData":{"11":{"笔画":11,"finishTime":"12:33:00"},"12":{"笔画" :8,"完成时间":"12:35:00"},"13":{"笔画":3,"完成时间":"12:37:00"},"14":{"笔画":7 ,"完成时间":"12:39:00"},"15":{"笔画":10,"完成时间":"12:40:00"},"16":{"笔画":11,"完成时间":"12:42:00"},"17":{"笔画":13,"完成时间":"12:45:00"},"18":{"笔画":6,"完成时间" :null},"1":{"笔画":1,"完成时间":"12:02:00"},"2":{"笔画":6,"完成时间":"12:04:00" },"3":{"笔画":7,"完成时间":"12:06:00"},"4":{"笔画":8,"完成时间":"12:08:00"}, "5":{"笔画":9,"完成时间":"12:10:00"},"6":{"笔画":10,"完成时间":"12:12:00"},"7 ":{"笔画":11,"完成时间":"12:14:00"},"8":{"笔画":12,"完成时间":"12:16:00"},"9": {“笔画”:13,“完成时间”:“12:18:00”},“10”:{“笔画”:1,“完成时间”:“12:30:00”}}。“roundFinishTime”:“ 12:45:23"}
正如您所看到的,该对象看起来是相同的,只是“holeData”的属性在服务器端以不同的顺序出现。问题是NOT然而,对象属性的排序不同;这是我根本无法访问服务器端的属性。请继续阅读以了解更多详细信息。
在服务器端,我可以通过 JSON.stringifying 对 Object.keys(data.holeData) 的调用来确认holeData 属性具有以下(子)属性:
[“11”,“12”,“13”,“14”,“15”,“16”,“17”,“18”,“1”,“2”,“3”,“4”,” 5","6","7","8","9","10"]
但是,当我尝试访问这些对象中任何一个的“笔画”(子)属性时,例如:
data.holeData["1"].lines --或-- data.holeData["1"]["lines"],
我收到错误:
执行失败:类型错误:无法从未定义中读取属性“笔画”。
因此,当对象从客户端传输到服务器端时,发生了意外的情况。
注:我已仔细阅读google.script.run 函数的合法参数规则 https://developers.google.com/apps-script/guides/html/reference/run,并且我的对象似乎没有违反其中任何一个。它仅由字符串和整数数据组成。
解决方案
我通过将 JSON.stringify() 应用于客户端的对象,然后在服务器端应用 JSON.parse() 解决了该问题。当我以这种方式序列化/反序列化时,我能够访问服务器端的所有对象属性。
知道这个物体发生了什么吗?这是一个错误还是一个功能?