Как сделать синтаксический анализ Json без изменений в Google Apps Script - PullRequest
1 голос
/ 26 февраля 2020

Я делаю запрос на Go к API вебинара в Apps Script, и ответ выглядит примерно так:

{"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;

}

1 Ответ

5 голосов
/ 26 февраля 2020

Как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Проблема и обходной путь:

Я думаю, что причина вашей проблемы в том, что 3669516009270899211 из "registrantKey":3669516009270899211 используется в качестве числа , В Javascript максимальное целое значение равно 9007199254740991. Ref Таким образом, когда 3669516009270899211 преобразуется в число, оно становится 3.6695160092708992E18, а когда оно преобразуется в строку, оно становится 3669516009270899000.

Так что в этом случае, как один из нескольких обходных путей, как насчет заключения в 3669516009270899211 двойных кавычек, таких как "registrantKey":"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\":\"$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)
    

Ссылка:

Если я неправильно понял ваш вопрос, и это не то направление, которое вам нужно Прошу прощения.

...