首页 > 解决方案 > 如何在不更改 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;

}

标签: jsongoogle-apps-scriptrequestjsonparser

解决方案


这个答案怎么样?请认为这只是几个可能的答案之一。

问题和解决方法:

我认为你的问题的原因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)
    

参考:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。


推荐阅读