powershell - Powershell 在 URL 中为 RestMethod 编码 JSON 数组
问题描述
我正在使用 Knack 来解决业务流程问题,但是为了确保它成功,我需要运行一个日常脚本来同步 Knack 和我们的 HR 系统之间的数据。
Knack 使用 REST API,我想对 GET 调用应用过滤器,这样我就不必填充本地表来比较数据。
Knack 需要在 URL 中编码如下示例的 JSON 数组,以便过滤返回的结果。该示例显示了如何在 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));
解决方案
您可以执行以下操作:
$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
被定义为here-string。$filters
被管道传输到ConvertFrom-Json,然后到ConvertTo-Json,以便轻松压缩 JSON 数据。但是,这确实将单引号替换为双引号。
.NET 类中的UrlEncode()对System.Web.HttpUtility
URL 中的特殊字符进行编码。
-f
是字符串格式运算符。这有助于构建您的 URI 字符串。最终的 URI 存储在$encodedUri
.
注意:使用小写十六进制字符对[System.Web.HttpUtility]::UrlEncode
特殊字符进行编码。如果您的系统需要大写十六进制字符,请[System.Net.WebUtility]::UrlEncode
改用。
推荐阅读
- python - Django - 在数据库中为数据类型几何(MultiPolygon)设置什么模型?
- python - 具有默认值的 Django 模型过滤器
- azure - Azure CDN 清除命令问题
- python - 如何将 pyqtgraph 图定位在窗口中的像素位置?
- sql - 正则表达式搜索 SQL 查询字段
- javascript - 鼠标悬停时如何增加滚动条宽度
- scala - 在 Intellij 中运行 Spark 应用程序时出错 - NoClassDefFoundError com/google/common/util/concurrent/internal/InternalFutureFailureAccess
- swift - 我在哪里可以看到swiftUI的源代码?
- npm-install - 仅具有全局安装依赖项的 NPM 包?
- json - 如何在 django rest framework api 中使用返回输入 json 响应获取输出