微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Google Apps 脚本 UrlFetchApp.fetch 将整数转换为浮点数? 来自:至:模式 1至:模式 2至:模式 3注意:参考:

如何解决Google Apps 脚本 UrlFetchApp.fetch 将整数转换为浮点数? 来自:至:模式 1至:模式 2至:模式 3注意:参考:

我正在编写一个使用 UrlFetchApp 访问多个 API 的 Google App 脚本

我的一个 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 的规范、您的请求标头和您确认的 curl 命令。所以我想提出以下修改模式作为我的猜测。

来自:

const options = { method: 'POST',headers: {...},payload: { someStringA: "foo",someStringB: "bar",App: 0 } }

至:模式 1

const options = { method: 'POST',contentType: "application/json",payload: JSON.stringify({ someStringA: "foo",App: 0 }) };
  • 在这种情况下,数据以 JSON 格式发送。
  • 如果您在 Content-Type 中使用了 headers,请将其删除。

至:模式 2

const options = { method: 'POST',App: 0 }) };
  • 在这种情况下,数据作为字符串值的表单数据发送。

至:模式 3

const options = { method: 'POST',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",App: 0 };
const options = {
  method: 'POST',headers: { Authorization: `Bearer ${token}` },payload: JSON.stringify(data)
};
const res = UrlFetchApp.fetch("your URL",options);
console.log(res.getContentText())

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。