Выдача словаря синтаксического анализа, возвращенного из команды App Script UrlFetchApp.fetch - PullRequest
0 голосов
/ 21 марта 2020

Проблемы с синтаксическим анализом словаря, возвращенного из UrlFetchApp.fetch с помощью простого вызова API.

Вот код:

var HTTPResponse = UrlFetchApp.fetch('<myURL>', options); 

, где параметры включают заголовки и данные формы, а HTTPResponse преобразуется в JSON объект, подобный этому:

var results = JSON.parse(HTTPResponse);

HTTPResponse from возвращает что-то вроде этого:

{"Category 1": "Value 1", "Category 2": "Value 2", 
"Category 3": "Value 3", "Processing Team": "Processing Team 1”}

Затем, когда я делаю это: results ["Category 1"] я получаю «undefined», так как значение, которое подразумевает «Категория 1», не является элементом в словаре.

Что-то в объекте или типе содержимого, возвращаемом вызовом API, не позволяет проанализировать этот словарь. Один и тот же словарь можно проанализировать в интерпретаторе Python.

Что мне не хватает? Похоже, что-то очевидное.

Спасибо за любые советы!

1 Ответ

1 голос
/ 21 марта 2020

Вы не должны анализировать возвращенные значения HTTPResponse

Первое, что вы должны сделать, это проверить код ответа на наличие 200, затем получить содержимое в виде текста, а затем проанализировать текст в JSON. HTTPResponse на самом деле не возвращенная полезная нагрузка. Возвращение извлекается с помощью метода getContentText() класса HTTPResponse.

var HTTPResponse = UrlFetchApp.fetch('<myURL>', options);

if (HTTPResponse.getResponseCode() !== 200) {
  throw new Error("Request Failed: " + HTTPResponse.getContentText());
  return;
}

var results = HTTPResponse.getContentText();

results = JSON.parse(results);

HTTPResponse не является JavaScript JSON. Это объект, и он будет оцениваться как объект, если тестируется на тип данных с typeof, но он не анализируется правильно. Когда вы пытаетесь разобрать HTTPResponse, вы пытаетесь разобрать что-то, что уже является объектом, и это не объект JavaScript, а класс скриптов Apps.

...