通过google.script.run传递对象时,服务器端丢失了对象属性值

时间:2018-04-18 23:02:17

标签: javascript google-apps-script google-sheets

前言

我发布此信息是为了警告其他人google.script.run中的潜在错误,提供可能的解决方法,并征求有关可能发生的事情的进一步社区见解。

问题

我将一个大型数据对象传递给通过google.script.run调用的服务器端函数。以下是在调用Google.script.run(通过JSON.stringify'ing并通过警告框输出)之前在客户端看起来的样子:

  

{ “roundStartTime”: “12:00:00”, “roundFinishTime”: “12点45分23秒”, “holeData”:{ “1”:{ “笔画”:1, “finishTime”:“12 :02:00 “},” 2 “:{” 笔画 “:6,” finishTime “:” 12时04分00秒 “},” 3 “:{” 笔画 “:7,” finishTime “:” 12点06分:00 “},” 4 “:{” 笔画 “:8中,” finishTime “:” 12点08分00秒 “},” 5 “:{” 笔画 “:9”,finishTime “:” 12点十分00秒“},” 6 “:{” 笔画 “:10”,finishTime “:” 12点12分00秒 “},” 7 “:{” 笔画 “:11”,finishTime “:” 12时14分00" 秒} , “8”:{ “笔画”:12, “finishTime”: “十二时16分00秒”}, “9”:{ “笔画”:13, “finishTime”: “12点18分○○秒”},” 10 “:{” 笔画 “:1,” finishTime “:” 12:30:00 “},” 11 “:{” 笔画 “:11”,finishTime “:” 12点33分00秒 “},” 12" :{ “笔画”:8中, “finishTime”: “十二点35分00秒”}, “13”:{ “笔画”:3 “finishTime”: “12时37分00秒”}, “14”:{ “笔划”:7, “finishTime”: “12时39分00秒”}, “15”:{ “笔画”:10 “finishTime”: “12点40分零零秒”}, “16”:{“笔划“:11”,finishTime “:” 12时42分00秒 “},” 17 “:{” 笔画 “:13,” finishTime “:” 12点45分○○秒 “},” 18 “:{” 笔画“: 6}}}`

这是与服务器端收到的相同的对象(通过JSON.stringify'ing并通过Google的Logger.log函数输出):

  

{ “roundStartTime”: “12:00:00”, “holeData”:{ “11”:{ “笔画”:11 “finishTime”: “12点33分00秒”}, “12”:{ “笔划”:8中, “finishTime”: “12点35分00秒”}, “13”:{ “笔画”:3 “finishTime”: “十二时37分00秒”}, “14”:{“笔划“:7,” finishTime “:” 12点39分00秒 “},” 15 “:{” 笔画 “:10”,finishTime “:” 十二时40分00秒 “},” 16 “:{” 笔画“: 11, “finishTime”: “12时42分00秒”}, “17”:{ “笔画”:13, “finishTime”: “12时45分00秒”}, “18”:{ “笔画”:6, “finishTime”:空}, “1”:{ “笔画”:1, “finishTime”: “12点02分00秒”}, “2”:{ “笔画”:6, “finishTime”:“12点04分:00 “},” 3 “:{” 笔画 “:7,” finishTime “:” 12时06分00秒 “}”,4 “:{” 笔画 “:8中,” finishTime “:” 12时08分00秒“},” 5 “:{” 笔画 “:9”,finishTime “:” 12时10分○○秒 “},” 6 “:{” 笔画 “:10”,finishTime “:” 12时12分00" 秒} , “7”:{ “笔画”:11 “finishTime”: “12时14分○○秒”}, “8”:{ “笔画”:12, “finishTime”: “12时16分〇〇秒”},” 9 “:{” 笔画 “:13,” finishTime “:” 12点18分○○秒 “},” 10 “:{” 笔画 “:1,” finishTime “:” 12:30:00 “}}” roundFinishTime “:” 十二时45分23" 秒}

如您所见,该对象看起来是相同的,只是“holeData”的属性在服务器端以不同的顺序出现。 问题是 NOT ,但对象属性的排序方式不同;我只是无法访问服务器端的属性。请继续阅读以获取更多详细信息。

在服务器端,我可以通过JSON.stringify对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”]。笔画 - 或 - data.holeData [“1”] [“笔画”],  我收到一个错误:

  

执行失败:TypeError:无法从undefined中读取属性“strokes”。

当对象从客户端传输到服务器端时,对象发生了意外情况。

注意:我仔细阅读了rules for legal parameters to google.script.run functions,我的对象似乎没有违反其中任何一项。它仅由字符串和整数数据组成。

解决方案

我已经通过将JSON.stringify()应用于客户端上的对象,然后在服务器端应用JSON.parse()来修复此问题。当我以这种方式序列化/反序列化时,我能够访问服务器端的所有对象属性。

知道这个对象发生了什么吗?这是一个错误还是一个功能?

0 个答案:

没有答案