【问题标题】:Parse a JSON Array from a GET API Call in google apps script从谷歌应用脚​​本中的 GET API 调用解析 JSON 数组
【发布时间】:2018-10-04 19:54:44
【问题描述】:

我使用 GET API 调用端点并获得如下输出:

  [
    {
        "available": false,
        "occasional": false,
        "id": 36005656995,
        "signature": "<div dir=\"ltr\"><p><br></p>\n</div>",
        "ticket_scope": 1,
        "created_at": "2018-06-20T10:13:25Z",
        "updated_at": "2018-08-29T06:37:21Z",
        "available_since": null,
        "contact": {
            "active": false,
            "email": "abcd@clasher.com",
            "job_title": null,
            "language": "en",
            "last_login_at": "2018-08-15T05:50:27Z",
            "mobile": null,
            "name": "abcd@clasher.com",
            "phone": "00903030333",
            "time_zone": "Chennai",
            "created_at": "2018-03-19T01:56:53Z",
            "updated_at": "2018-09-03T04:41:59Z"
        }
    },
    {
        "available": false,
        "occasional": true,
        "id": 36004999676,
        "signature": "<div dir=\"ltr\"><p><br></p>\n</div>",
        "ticket_scope": 1,
        "created_at": "2018-03-07T05:47:43Z",
        "updated_at": "2018-06-21T12:45:41Z",
        "available_since": null,
        "contact": {
            "active": true,
            "email": "sab@clashuniversal.com",
            "job_title": null,
            "language": "en",
            "last_login_at": "2018-03-07T05:49:16Z",
            "mobile": null,
            "name": "Sample Agent",
            "phone": null,
            "time_zone": "Chennai",
            "created_at": "2018-03-07T05:47:43Z",
            "updated_at": "2018-05-28T10:39:39Z"
        }
    },
    {
        "available": false,
        "occasional": false,
        "id": 36004979341,
        "signature": "<div dir=\"ltr\"><p>Regards<br>Clashuniversal</p></div>",
        "ticket_scope": 1,
        "created_at": "2018-03-06T15:27:59Z",
        "updated_at": "2018-10-02T19:51:12Z",
        "available_since": "2018-08-10T14:10:09Z",
        "contact": {
            "active": true,
            "email": "prasadclasher@gmail.com",
            "job_title": null,
            "language": "en",
            "last_login_at": "2018-09-30T06:02:21Z",
            "mobile": null,
            "name": "Subramania Prasad",
            "phone": "9999999998",
            "time_zone": "Chennai",
            "created_at": "2018-03-06T15:27:59Z",
            "updated_at": "2018-09-20T08:43:18Z"
        }
    }
]

请注意,响应本身是一个 JSON 数组。

我想做的是把它解析成一个 Javascript 对象,这样我就可以对这些数据做一些处理。

为了解析这些数据,我使用以下代码:

test_response = UrlFetchApp.fetch(domain,obj);
test_resp_string = test_response.getContentText();
object_1 = JSON.parse(test_resp_string);

上面代码的期望是我想分别访问响应的每个对象,例如当我做 Logger.log(object_1[0]) 应该给我返回响应的第一个元素,如下所示:

{
        "available": false,
        "occasional": false,
        "id": 36005656995,
        "signature": "<div dir=\"ltr\"><p><br></p>\n</div>",
        "ticket_scope": 1,
        "created_at": "2018-06-20T10:13:25Z",
        "updated_at": "2018-08-29T06:37:21Z",
        "available_since": null,
        "contact": {
            "active": false,
            "email": "abcd@clasher.com",
            "job_title": null,
            "language": "en",
            "last_login_at": "2018-08-15T05:50:27Z",
            "mobile": null,
            "name": "abcd@clasher.com",
            "phone": "00903030333",
            "time_zone": "Chennai",
            "created_at": "2018-03-19T01:56:53Z",
            "updated_at": "2018-09-03T04:41:59Z"
        }
    }

但是,当我执行 Logger.log(object_1[0]) 时,我得到以下响应:

 {
  updated_at=2018-08-29T06:37:21Z, 
  signature=<div dir="ltr"><p><br></p></div>, 
  ticket_scope=1, 
  contact={
  last_login_at=2018-08-15T05:50:27Z, 
  updated_at=2018-09-03T04:41:59Z, 
  phone=00903030333, 
  mobile=null, 
  name=abcd@clasher.com, 
  active=false, 
  created_at=2018-03-19T01:56:53Z, 
  language=en, 
  time_zone=Chennai, 
  job_title=null, 
  email=abcd@clasher.com}, 
  available=false, 
  created_at=2018-06-20T10:13:25Z, 
  occasional=false, 
  id=3.6005656995E10, 
  available_since=null
}

您会注意到预期结果与我得到的结果之间的以下差异:

  1. 在我得到输出顺序不同的响应中,我很想知道为什么会这样,例如。在原始调用的响应中,第一个键是“可用的”,而在解析数据后它是“updated_at”

  2. id 键在原始响应中有一个值为 36005656995,但是使用 JSON.parse 将其转换为 javascript 对象后,id 值为 3.6005656995E10由于这种转换,我无法进行后期处理。在解析 JSON 时,我也找不到将其显式转换为字符串的方法(以便数字在原始响应中完全保留)

我能够使用 to.String() 将数字转换为响应中看到的原始 ID,但是我仍然很想找出以下查询的答案:

如何保留原始响应中的 ID 值而不将其转换为浮点数或长整数

我希望我的查询很清楚,提前感谢您完成冗长的查询。

【问题讨论】:

  • Logger.log 将它们的对象更改为字符串。但是,我相信实际的对象是不变的。做一个 for 循环来迭代然后记录 eachv 元素。

标签: arrays json rest google-apps-script


【解决方案1】:

当您使用JSON.parse() 时,有效负载字符串将转换为对象数组。将保留顶级数组中项目的顺序。然而,每个数组项都是一个对象,这些对象上的属性的顺序并不能保证,也不需要保证,因为您将按名称引用这些属性(使用点表示法或括号查找)。

id 键很好,它只是用科学计数法表示,这是大数的标准。如果您需要纯十进制格式的数字作为字符串,请使用toFixed() 方法进行转换。

【讨论】:

    猜你喜欢
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 2014-03-26
    • 2021-11-20
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多