这是我的 Python 端。
...
SCRIPT_ID = '<script id>'
creds = GetGoogleCredentials()
gscripts = build( 'script', 'v1', credentials = creds )
# Create an execution request object.
request = {
"function": "test1",
"devMode": True,
"parameters": [{
"1": "hi",
"3": "bye",
"a5": "yes"
}]
}
# Make the API request.
response = gscripts.scripts().run(
body = request,
scriptId = SCRIPT_ID
).execute()
print( response )
这是 Apps 脚本方面:
function test1( event ) {
Logger.log( event );
Logger.log( event[1] );
Logger.log( event["3"] );
Logger.log( event["a5"] );
}
记录器中的输出:
[20-01-16 16:34:21:530 PST] {1=hi, 3=bye, a5=yes}
[20-01-16 16:34:21:531 PST] undefined
[20-01-16 16:34:21:531 PST] undefined
[20-01-16 16:34:21:532 PST] yes
我一直在试图找出我做错了什么以及为什么当我尝试索引它时对象返回未定义,即使记录器能够读取值。这似乎与使用数字作为未正确处理的对象键有关。一开始我确信我在做一些愚蠢的事情,但这是我缩小范围的测试用例。
最佳答案
- 您已经能够使用 Apps Script API 和 Python 来运行 Google Apps 脚本的功能。
- 当您运行
test1
的函数时在 GAS 端,参数为{"1": "hi", "3": "bye","a5": "yes"}
,两者event[1]
和event["3"]
返回undefined
。- 您想要检索值
hi
和bye
与event[1]
和event["3"]
,分别。
- 您想要检索值
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能答案之一。
问题和解决方法:
当以下函数直接在 Google Apps 脚本的脚本编辑器中运行时, hi
的所有值, bye
和yes
都显示在日志中。由此可见,Google Apps Script 可以使用的 key 就是数字。
function myFunction() {
var event = {"1": "hi", "3": "bye","a5": "yes"};
Logger.log( event[1] ); // <--- hi
Logger.log( event["3"] ); // <--- bye
Logger.log( event["a5"] ); // <--- yes
}
何时 {"1": "hi", "3": "bye","a5": "yes"}
使用 Apps Script API 发送,作为数字的键不返回值。我也可以在我的环境中确认这种情况。在这种情况下,可以检索每个 key 。但是当键是数字时,无法检索键的值。另一方面,在the official document ,我可以确认struct_value
(JSON 对象)可用于 parameters[]
.
作为另一项测试,我运行了函数 test1
使用以下curl命令。
curl -X POST \
-H "Authorization: Bearer ###" \
-H "Content-Type: application/json" \
-d "{function: 'test1', parameters: [{'1': 'hi', '3': 'bye', 'a5': 'yes'}], devMode: true}" \
"https://script.googleapis.com/v1/scripts/###:run"
我可以确认发生了同样的问题。由此看来,google-api-python-client模块不是造成此问题的原因。
从上面的情况来看,我认为当对象发送到GAS端时,对象可能无法被正确接收。因此,作为解决方法,我输入 event = JSON.parse(JSON.stringify(event))
在函数的顶部。通过此,我可以确认所有值均已检索。
修改后的脚本:
function test1( event ) {
event = JSON.parse(JSON.stringify(event)); // Added
Logger.log( event ); // <--- {1=hi, 3=bye, a5=yes}
Logger.log( event[1] ); // <--- hi
Logger.log( event["3"] ); // <--- bye
Logger.log( event["a5"] ); // <--- yes
}
引用文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
关于google-apps-script - 将数据从 Python 传递到 Google Apps 脚本。怎么了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59779811/