如何在不更改 Google Apps 脚本的情况下进行 Json 解析
How to make a Json parse without changes in Google Apps Script
我在 Apps 脚本中请求转到网络研讨会 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;
}
这个答案怎么样?请将此视为几个可能的答案之一。
问题和解决方法:
我认为你的问题的原因是 "registrantKey":3669516009270899211
的 3669516009270899211
被用作号码。在Javascript中,最大整数值为9007199254740991
。 Ref所以当3669516009270899211
转换为数字时,它变成了3.6695160092708992E18
,当它转换为字符串时,它变成了3669516009270899000
。
所以在这种情况下,作为几种解决方法之一,用 "registrantKey":"3669516009270899211"
这样的双引号将 3669516009270899211
括起来怎么样?这样, "3669516009270899211"
被用于字符串,您可以检索 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\":\"\","); // 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\":\"\",");
var obj = JSON.parse(str);
Logger.log(obj)
参考:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
我在 Apps 脚本中请求转到网络研讨会 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;
}
这个答案怎么样?请将此视为几个可能的答案之一。
问题和解决方法:
我认为你的问题的原因是 "registrantKey":3669516009270899211
的 3669516009270899211
被用作号码。在Javascript中,最大整数值为9007199254740991
。 Ref所以当3669516009270899211
转换为数字时,它变成了3.6695160092708992E18
,当它转换为字符串时,它变成了3669516009270899000
。
所以在这种情况下,作为几种解决方法之一,用 "registrantKey":"3669516009270899211"
这样的双引号将 3669516009270899211
括起来怎么样?这样, "3669516009270899211"
被用于字符串,您可以检索 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\":\"\","); // 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\":\"\","); var obj = JSON.parse(str); Logger.log(obj)
参考:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。