Reputation: 355
I make a request to Go to Webinar API in Apps Script and the response is something like this:
{"joinUrl":"https://example.com","asset":true,"registrantKey":3669516009270899211,"status":"APPROVED"}
When I make a JSON.parse i get something like this:
{joinUrl=https://example.com, asset=true, registrantKey=3.6695160092708992E18, status=APPROVED}
The RegistrantKey changes, I dont know why.
Thats my code:
try{
var resp = UrlFetchApp.fetch(url,options)
var json=JSON.parse(resp);
return json
}catch(err){
Logger.log(err);
return err;
}
Upvotes: 1
Views: 374
Reputation: 201408
How about this answer? Please think of this as just one of several possible answers.
I think that the reason of your issue is that 3669516009270899211
of "registrantKey":3669516009270899211
is used as the number. In Javascript, the maximum integer value is 9007199254740991
. Ref So when 3669516009270899211
is converted to the number, it becomes 3.6695160092708992E18
and when this is converted to the string, it becomes 3669516009270899000
.
So in this case, as one of several workaround, how about enclosing 3669516009270899211
by the double quotes like "registrantKey":"3669516009270899211"
? By this, "3669516009270899211"
is used ad the string, and you can retrieve the value of 3669516009270899211
.
When your script is modified, how about the following modification?
From:var resp = UrlFetchApp.fetch(url,options)
var json=JSON.parse(resp);
return json
To:
var resp = UrlFetchApp.fetch(url,options);
resp = resp.getContentText().replace(/registrantKey":(\d.+),/, "registrantKey\":\"$1\","); // Added
var json=JSON.parse(resp);
return json
As the test script, you can also use the following script.
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)
If I misunderstood your question and this was not the direction you want, I apologize.
Upvotes: 5