Я запускаю функцию Azure из Azure Synapse и отправляю сконструированную строку в качестве тела запроса HTTP POST.
Я пытаюсь преобразовать его в объект PS, а затем что-то сделать со значениями - однако по какой-то причине мне это не удается, и переменные region и environment пусты:
2023-05-12T11:17:13Z [Information] INFORMATION: region:
2023-05-12T11:17:13Z [Information] INFORMATION: environment:
Я проверил ввод компонента Synapse «Azure Function» в конвейере, и ввод выглядит следующим образом:
{
"functionName": "MyFunc",
"method": "POST",
"headers": {},
"body": "{environment: 'q', region: 'de', delta: 'true'}"
}
Я также использовал содержимое «тела» и выполнил тест / запуск с пользовательским телом (скопировал его), но это не удалось.
Вот код PS из моего Powershell:
using namespace System.Net
param($Request)
$request_body = $Request.Body | ConvertFrom-Json
$region = $request_body.region
$environment = $request_body.environment
Write-Host "Loaded runtime config from request body."
Write-Host "region: $region"
Write-Host "environment: $environment"
Если я сделаю следующее локально, он проанализирует его правильно:
PS > $a = "{environment: 'q', region: 'de', delta: 'true'}"
PS > $b = $a | ConvertFrom-Json
PS > $b
environment region delta
----------- ------ -----
q de true
PS > Write-Host $b.environment
q
Любая помощь приветствуется.
Да, не работает - похоже, что он входит в виде строки и, следовательно, на него нельзя ссылаться
Да, это правда
Это потому, что это не так. Это строка.
Можете попробовать $Request.RawBody | ConvertFrom-Json?
Не тот же, но похожий результат, вывод: {environment: 'q', region: 'de', delta: 'true'} - но он все еще не преобразован в объект, на который я могу сослаться environment
Обратите внимание, что JSON официально не поддерживает одинарные кавычки для строк — допустимы только двойные кавычки. Некоторые синтаксические анализаторы более гибкие, поэтому YMMV, если вы используете одинарные кавычки... json.org/json-en.html «Строка — это последовательность из нуля или более символов Юникода, заключенная в двойные кавычки с использованием обратной косой черты. "


У меня уже было правильное решение... проблема заключалась в устаревшей версии PS ('6.*'). После обновления requirements.psd1 до 'az' = '9.*' теперь работает.
Однако, в конце концов, я решил эту проблему, фактически передав JSON из Synapse в тело HTTP. Сначала меня смутило то, что объект JSON отображается в журналах как строка, но на самом деле это неправильно. Он остается объектом.
А вы пробовали
$Request.Body.region?