json - 无法使用 powershell 创建正确的 json 对象
问题描述
需要通过获取规则数据来复制来自 1 个 API 的标签响应,然后使用新的标签名称发布规则数据 Initial Get response from API
``` {
"metadata": {
"configurationVersions": [
7
],
"clusterVersion": "1.200.99.20200828-133130"
},
"id": "a257c448-7cbf-48cd-9cdf-a58d60ade6ef",
"name": "Billing",
"rules": [
{
"type": "SERVICE",
"enabled": true,
"valueFormat": null,
"propagationTypes": [
"SERVICE_TO_PROCESS_GROUP_LIKE",
"SERVICE_TO_HOST_LIKE"
],
"conditions": [
{
"key": {
"attribute": "PROCESS_GROUP_PREDEFINED_METADATA",
"dynamicKey": "KUBERNETES_NAMESPACE",
"type": "PROCESS_PREDEFINED_METADATA_KEY"
},
"comparisonInfo": {
"type": "STRING",
"operator": "CONTAINS",
"value": "billing-test",
"negate": false,
"caseSensitive": false
}
}
]
},
{
"type": "SERVICE",
"enabled": true,
"valueFormat": null,
"propagationTypes": [
"SERVICE_TO_PROCESS_GROUP_LIKE",
"SERVICE_TO_HOST_LIKE"
],
"conditions": [
{
"key": {
"attribute": "PROCESS_GROUP_PREDEFINED_METADATA",
"dynamicKey": "KUBERNETES_NAMESPACE",
"type": "PROCESS_PREDEFINED_METADATA_KEY"
},
"comparisonInfo": {
"type": "STRING",
"operator": "CONTAINS",
"value": "billingservices-test",
"negate": false,
"caseSensitive": false
}
}
]
}
]}```
我只是从上面的 api 中检索规则并删除其他属性。当我使用 post api 时,规则与上面的初始 get 响应不相似。我确定我没有正确解析 json 响应。对于如何获取条件和传播类型的前一个 json 毫无头绪。尝试创建列表和哈希表但遇到错误。
"name": "Billingnew",
"rules": [
{
"type": "SERVICE",
"enabled": true,
"valueFormat": null,
"propagationTypes": "SERVICE_TO_PROCESS_GROUP_LIKE SERVICE_TO_HOST_LIKE",
"conditions": ""
},
{
"type": "SERVICE",
"enabled": true,
"valueFormat": null,
"propagationTypes": "SERVICE_TO_PROCESS_GROUP_LIKE SERVICE_TO_HOST_LIKE",
"conditions": ""
}
]
}
下面的powershell脚本。
#param([string]$Arguments)
#$oldtagName,$newTagName=$Arguments.split(",")
#Write-Host $tagName,$userid
$oldtagName = "Billing"
$newTagName = "Bill5"
$input = "C:\Users\$userid\rules_$oldtagName.csv"
$uri="{{nonprod}}/api/config/v1/autoTags"
$url = "{{nonprod}}/api/config/v1/autoTags?"
$Tags = (Invoke-RestMethod -Method Get -Uri $url)
#Write-Host $Tags.values
$jsonBase = @{}
foreach ( $tag in $Tags.values)
{
$tagName=$tag.name
$tagId=$tag.id
$rules = @{}
if ( $oldtagName -eq $tagName){
Write-Host $tagName,$tagId
$aurl = "{{nonprod}}/api/config/v1/autoTags/$tagId/?"
$taginfo = (Invoke-RestMethod -Method Get -Uri $aurl)
$tagName = $taginfo.name
$taginfo.PSObject.Properties.Remove('metadata')
$taginfo.PSObject.Properties.Remove('id')
$taginfo.PSObject.Properties.Remove('name')
$rule = $taginfo | Select-Object -Property rules
$taginfo
$jsonBase.add("name",$newTagName)
$jsonBase.add("rules", $taginfo.rules)
$jsonBase
$data= $jsonBase | ConvertTo-Json
Write-Host "after" $data
}#if tag end
}#for each end
$headers = @{ Accept="application/json";Authorization="Api-Token <removed>"}
$newTagInfo = (Invoke-RestMethod $uri -Headers $headers -Method Post -Body $data -ContentType "application/json")
$newTagId = $newTagInfo.id
$newTagName = $newTagInfo.name
Write-Host $newTagInfo.id, $newTagInfo.name
解决方案
推荐阅读
- javascript - 基于SASS中的类名计算
- android - Firebase 实例 ID,获取许多不同授权实体的令牌抛出 INVALID_SENDER
- sql-server - 将 VARBINARY 转换为 Int 或 BigInt
- python - 解析查询结果以将其插入另一个数据库
- swift - 将多个 pickerView 选定值导出为 UILabel 上的数字
- python - 使用 python pandas 加入多个 CSV 文件
- python - Python中涉及多种模式的正则表达式匹配
- javascript - 如何对包含数组对象的对象进行字符串化?
- python - Django 条件创建
- php - 联系表格值进入 URL