Google Apps 脚本 UrlFetchApp.fetch 将整数转换为浮点数?
Google Apps Script UrlFetchApp.fetch converts integers to floats?
我正在编写一个 Google 应用程序脚本,它使用 UrlFetchApp
访问几个 APIs
我的一个 API POST 请求需要负载中的整数值,但是 UrlFetchApp.fetch 将整数值(即 0)更改为浮点数(即 0.0)
我的选项看起来像这样:
const options = { method: 'POST', headers: {...}, payload: { someStringA: "foo", someStringB: "bar", App: 0 } }
并且从 API 返回的错误信息是:
{"message":"The request is invalid.","modelState":{"request.App":["The value '0.0' is not valid for App.","The App field is required."]}}
UrlFetchApp.fetch 已将我的 App 值:0 转换为:0.0,此 API 端点不接受。
我尝试将请求值强制为字符串“0”,但是 API 不接受 属性 的字符串类型。
有人知道解决这个问题的方法吗?我如何告诉 UrlFetchApp.fetch 保持整数值“原样”而不将它们转换为浮点数?
ps。同样的请求对我来说可以通过 cURL 像这样工作:
curl --location --request POST "https://$url" \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $token" \
--data "{\"someStringA\":\"$foo\",\"someStringB\":\"$bar\",\"app\":0}"
提前感谢您的帮助
更新:抱歉,这里的问题毕竟不是 UrlFetchApp。我的问题是从 api 返回的响应是一个空对象,我试图像这样记录它:JSON.parse(response);导致提到的错误。
根据您的问题,很遗憾,我不确定您要使用的 API 的规格、您的请求 header 以及您确认的 curl 命令。所以我想提出以下修改模式作为我的猜测。
发件人:
const options = { method: 'POST', headers: {...}, payload: { someStringA: "foo", someStringB: "bar", App: 0 } }
收件人:模式 1
const options = { method: 'POST', headers: {...}, contentType: "application/json", payload: JSON.stringify({ someStringA: "foo", someStringB: "bar", App: 0 }) };
- 在这种情况下,数据发送为 JSON。
- 如果您在
headers
中使用 Content-Type
,请将其删除。
收件人:模式 2
const options = { method: 'POST', headers: {...}, payload: JSON.stringify({ someStringA: "foo", someStringB: "bar", App: 0 }) };
- 在这种情况下,数据作为字符串值的表单数据发送。
收件人:模式 3
const options = { method: 'POST', headers: {...}, payload: { someStringA: "foo", someStringB: "bar", App: "0" } };
- 在这种情况下,
"0"
在解析数据中作为表单数据的字符串值发送。
注:
- 如果以上修改方式不能解决您的问题,能否提供您确认的示例curl命令?至此,我想修改我的答案。
参考:
已添加:
从您的 curl 命令中,我了解到我的模式 1 与您的 curl 命令是相同的请求。但不幸的是,从你的回复 Unexpected end of JSON input
来看,虽然我不确定你当前的脚本是否使用我的模式 1,但当你的 curl 命令转换为 Google Apps 脚本时,它变成如下。你能再测试一下吗?
const token = "###"; // Please use your token.
const data = { someStringA: "foo", someStringB: "bar", App: 0 };
const options = {
method: 'POST',
headers: { Authorization: `Bearer ${token}` },
contentType: "application/json",
payload: JSON.stringify(data)
};
const res = UrlFetchApp.fetch("your URL", options);
console.log(res.getContentText())
我正在编写一个 Google 应用程序脚本,它使用 UrlFetchApp
访问几个 APIs我的一个 API POST 请求需要负载中的整数值,但是 UrlFetchApp.fetch 将整数值(即 0)更改为浮点数(即 0.0)
我的选项看起来像这样:
const options = { method: 'POST', headers: {...}, payload: { someStringA: "foo", someStringB: "bar", App: 0 } }
并且从 API 返回的错误信息是:
{"message":"The request is invalid.","modelState":{"request.App":["The value '0.0' is not valid for App.","The App field is required."]}}
UrlFetchApp.fetch 已将我的 App 值:0 转换为:0.0,此 API 端点不接受。
我尝试将请求值强制为字符串“0”,但是 API 不接受 属性 的字符串类型。
有人知道解决这个问题的方法吗?我如何告诉 UrlFetchApp.fetch 保持整数值“原样”而不将它们转换为浮点数?
ps。同样的请求对我来说可以通过 cURL 像这样工作:
curl --location --request POST "https://$url" \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $token" \
--data "{\"someStringA\":\"$foo\",\"someStringB\":\"$bar\",\"app\":0}"
提前感谢您的帮助
更新:抱歉,这里的问题毕竟不是 UrlFetchApp。我的问题是从 api 返回的响应是一个空对象,我试图像这样记录它:JSON.parse(response);导致提到的错误。
根据您的问题,很遗憾,我不确定您要使用的 API 的规格、您的请求 header 以及您确认的 curl 命令。所以我想提出以下修改模式作为我的猜测。
发件人:
const options = { method: 'POST', headers: {...}, payload: { someStringA: "foo", someStringB: "bar", App: 0 } }
收件人:模式 1
const options = { method: 'POST', headers: {...}, contentType: "application/json", payload: JSON.stringify({ someStringA: "foo", someStringB: "bar", App: 0 }) };
- 在这种情况下,数据发送为 JSON。
- 如果您在
headers
中使用Content-Type
,请将其删除。
收件人:模式 2
const options = { method: 'POST', headers: {...}, payload: JSON.stringify({ someStringA: "foo", someStringB: "bar", App: 0 }) };
- 在这种情况下,数据作为字符串值的表单数据发送。
收件人:模式 3
const options = { method: 'POST', headers: {...}, payload: { someStringA: "foo", someStringB: "bar", App: "0" } };
- 在这种情况下,
"0"
在解析数据中作为表单数据的字符串值发送。
注:
- 如果以上修改方式不能解决您的问题,能否提供您确认的示例curl命令?至此,我想修改我的答案。
参考:
已添加:
从您的 curl 命令中,我了解到我的模式 1 与您的 curl 命令是相同的请求。但不幸的是,从你的回复 Unexpected end of JSON input
来看,虽然我不确定你当前的脚本是否使用我的模式 1,但当你的 curl 命令转换为 Google Apps 脚本时,它变成如下。你能再测试一下吗?
const token = "###"; // Please use your token.
const data = { someStringA: "foo", someStringB: "bar", App: 0 };
const options = {
method: 'POST',
headers: { Authorization: `Bearer ${token}` },
contentType: "application/json",
payload: JSON.stringify(data)
};
const res = UrlFetchApp.fetch("your URL", options);
console.log(res.getContentText())