Powershell кодирует массив JSON в URL для RestMethod - PullRequest
0 голосов
/ 16 апреля 2020

Я использую Knack для решения проблемы бизнес-процесса, однако для обеспечения ее успеха мне нужно запустить ежедневный скрипт для синхронизации c данных между Knack и нашей системой управления персоналом.

Knack использует REST API, и я хочу применить фильтр к вызову GET, чтобы мне не приходилось заполнять локальную таблицу для сравнения данных.

Knack требует JSON массив, как в примере ниже, который будет закодирован в URL для фильтрации возвращаемых результатов. Пример показывает, как это сделать в Javascript, но я не могу понять, как это сделать в Powershell, кто-нибудь сможет помочь?

 // Request route
var api_url = 'https://api.knack.com/v1/objects/object_1/records';

// Prepare filters
var filters = {
  'match': 'or',
  'rules': [
             {
               'field':'field_1',
               'operator':'is',
               'value':'Dodgit'
             },
             {
               'field':'field_1',
               'operator':'is blank'
             }
           ]
};

// Add filters to route
api_url += '?filters=' + encodeURIComponent(JSON.stringify(filters));

1 Ответ

2 голосов
/ 16 апреля 2020

Вы можете сделать следующее:

$api_url = 'https://api.knack.com/v1/objects/object_1/records'
$filters = @'
{
  'match': 'or',
  'rules': [
             {
               'field':'field_1',
               'operator':'is',
               'value':'Dodgit'
             },
             {
               'field':'field_1',
               'operator':'is blank'
             }
           ]
}
'@
$CompressedFilters = $filters | ConvertFrom-Json | ConvertTo-Json -Depth 10 -Compress
$encodedUri = "{0}?filters={1}" -f $api_url,[System.Web.HttpUtility]::UrlEncode($CompressedFilters)

Объяснение:

$filters определяется как здесь-строка . $filters передается в ConvertFrom- Json, а затем в ConvertTo- Json для простого сжатия данных JSON. Однако это заменяет одинарные кавычки на двойные.

UrlEncode () из класса System.Web.HttpUtility. NET кодирует специальные символы в URL.

-f является оператором формата строки. Это помогает построить вашу строку URI. Окончательный URI сохраняется в $encodedUri.

ПРИМЕЧАНИЕ: [System.Web.HttpUtility]::UrlEncode кодирует специальные символы шестнадцатеричными строчными буквами. Если вашей системе требуются заглавные шестнадцатеричные символы, вместо этого используйте [System.Net.WebUtility]::UrlEncode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...