这是我的场景:
我有一个通过 Powershell 调用的 API,有效负载是一个 JSON 文件,需要多次调用该 API,并且每次的有效负载略有不同(想象一下将项目添加到列表中)。
这是 JSON 模板的示例。
$JSONpaylod = @"
{
"Config":
{
"address": $variable1,
"authPassword": $variable2,
"authUsername": $variable3}
}
"@
因为需要多次完成,所以我将使用 For-Each 循环,例如:
For-each($_.item in $list){
Do things, then call the API}
但是,我遇到的问题是,根据 $list 中的当前项目,我想根据查找更新 $variable1、$variable2 等。
在 PowerShell 中是否有一种优雅的方法可以做到这一点?一种想法是,在我的 $list 哈希表中,将其设置为如下所示:
Item, var1, var2, var3
1, 23, 1111, admin
2, 10, 1234, admin
但看起来这会很笨重
$variable1 = $_.var1 etc.
是否有更好的方法来做到这一点,还是我想太多了?
最佳答案
我建议您使用 CSV 作为输入并构造遵循 Json 负载结构的对象,然后您可以使用 ConvertTo-Json
将它们转换为 Json 字符串。这样做的好处是 ConvertTo-Json
可以处理 Json 字符串中必须转义的字符,即 "
、\
、 /
等等。
$csv = @'
var1, var2, var3
23, 1111, admin
10, 1234, admin
'@ | ConvertFrom-Csv
foreach($item in $csv) {
$payload = [pscustomobject]@{
Config = [pscustomobject]@{
address = $item.var1
authPassword = $item.var2
authUsername = $item.var3
}
} | ConvertTo-Json
# do stuff with payload
}
举个例子,下面的代码将在插入 "
的位置(第 3 行,位置 20)处失败。
Conversion from JSON failed with error: After parsing a value an unexpected character was encountered: b. Path 'Config.address', line 3, position 20.
$item = 'foo"bar'
@"
{
"Config": {
"address": "$item"
}
}
"@ | ConvertFrom-Json
这会起作用:
[pscustomobject]@{
Config = [pscustomobject]@{
address = 'foo"bar'
}
} | ConvertTo-Json | ConvertFrom-Json
关于powershell - 在 for-each 循环中对字符串进行条件格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76369856/