json - 如何在不更改 Google Apps 脚本的情况下进行 Json 解析
问题描述
我在 Apps Script 中向 Go to Webinar API 发出请求,响应如下所示:
{"joinUrl":"https://example.com","asset":true,"registrantKey":3669516009270899211,"status":"APPROVED"}
当我制作 JSON.parse 时,我得到如下信息:
{joinUrl=https://example.com, asset=true, registrantKey=3.6695160092708992E18, status=APPROVED}
RegistrantKey 改变了,我不知道为什么。
那是我的代码:
try{
var resp = UrlFetchApp.fetch(url,options)
var json=JSON.parse(resp);
return json
}catch(err){
Logger.log(err);
return err;
}
解决方案
这个答案怎么样?请认为这只是几个可能的答案之一。
问题和解决方法:
我认为你的问题的原因3669516009270899211
是"registrantKey":3669516009270899211
被用作数字。在 Javascript 中,最大整数值为9007199254740991
. Ref所以当3669516009270899211
转换为数字时,它变成了3.6695160092708992E18
,当它转换为字符串时,它变成了3669516009270899000
。
所以在这种情况下,作为几种解决方法之一,3669516009270899211
用双引号括起来怎么样"registrantKey":"3669516009270899211"
?通过这种"3669516009270899211"
方式,使用 ad 字符串,您可以检索 的值3669516009270899211
。
修改后的脚本:
当你的脚本被修改时,下面的修改呢?
从:var resp = UrlFetchApp.fetch(url,options)
var json=JSON.parse(resp);
return json
至:
var resp = UrlFetchApp.fetch(url,options);
resp = resp.getContentText().replace(/registrantKey":(\d.+),/, "registrantKey\":\"$1\","); // Added
var json=JSON.parse(resp);
return json
笔记:
作为测试脚本,您还可以使用以下脚本。
var str = '{"joinUrl":"https://example.com","asset":true,"registrantKey":3669516009270899211,"status":"APPROVED"}'; str = str.replace(/registrantKey":(\d.+),/, "registrantKey\":\"$1\","); var obj = JSON.parse(str); Logger.log(obj)
参考:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
推荐阅读
- ssis - SSIS如何选择并行执行的数据流任务?
- javascript - jQuery单击事件未按预期工作
- python - 如何让 sys.stdout 将结果打印到 tkinter GUI 文本框中
- oracle - Oracle COUNT(DISTINCT expr) 导致 ORA-00979 错误
- ios - 无法从 GET 请求将数据附加到数组
- python - 将表单数据从 React 句柄提交函数发布到 python API?
- diff - 如何显示两个文件的差异,但只显示具有共同起始字符串的行?
- objective-c - 用触摸板放大一个点(在opengl或metalkit中用Objective-C使用缩放和平移和旋转)
- php - 转换十六进制字符串时出现奇怪的字符
- c++ - C++ 或 Rcpp:没有循环的两个向量的比较